鍍金池/ 教程/ Java/ 理想的開(kāi)源框架與設(shè)計(jì)原則
分布式鎖的簡(jiǎn)單實(shí)現(xiàn)
關(guān)于框架體系與戰(zhàn)術(shù)的思考
開(kāi)源與中小型軟件公司的未來(lái)趨勢(shì)
生態(tài)圈的建立
用200行的DBF解析器來(lái)展示良好架構(gòu)設(shè)計(jì)
緣起
業(yè)務(wù)流程引擎設(shè)計(jì)
軟件開(kāi)發(fā)雜談
高屋建瓴,理念先行
借船下海還是造船下海
Web界面快速開(kāi)發(fā)實(shí)踐
教計(jì)算機(jī)程序解數(shù)學(xué)題
量身定制規(guī)則引擎,適應(yīng)多變業(yè)務(wù)場(chǎng)景
緩存相關(guān)代碼的演變
理想的開(kāi)源框架與設(shè)計(jì)原則
框架2.0的設(shè)計(jì)梳理
與屈原對(duì)話(huà)及開(kāi)源精神

理想的開(kāi)源框架與設(shè)計(jì)原則

理想的開(kāi)源框架

  • 她應(yīng)該是小的、簡(jiǎn)單的,滿(mǎn)足Simple Is Beautiful
  • 她應(yīng)該是成長(zhǎng)性好的,隨著不斷的擴(kuò)展,她可以越來(lái)越豐滿(mǎn)
  • 她應(yīng)該是有良好工具支持的,為什么要花時(shí)間做工具可以完成的事情呢?
  • 她應(yīng)該是自組裝的,也就是盡可能的脫離配置,而是用一種依賴(lài)即可用,取消依賴(lài)即消失的全自動(dòng)處理模式
  • 她應(yīng)該是模塊化的,所有的內(nèi)容都可以被打入jar包而作為一個(gè)整體進(jìn)行發(fā)布,并且能支持熱部署的,可以開(kāi)著車(chē)兒換輪胎的
  • 她應(yīng)該是支持水平部署的,想加服務(wù)器就加,想減服務(wù)器就減
  • 她應(yīng)該是有良好知識(shí)積累體系的,使得使用Tiny框架的人們?cè)接迷綇?qiáng),越用越爽
  • 她應(yīng)該是便于企業(yè)降低開(kāi)發(fā)成本的,便于技術(shù)經(jīng)理控制開(kāi)發(fā)進(jìn)度的,便于開(kāi)發(fā)人員快速上手的
  • 她應(yīng)該是避免重復(fù)勞動(dòng)的,所有軟件參與者都不應(yīng)該做重復(fù)的事情
  • 她應(yīng)該是自管理的,最好不要讓程序員配置這個(gè)配置那個(gè)
  • 她應(yīng)該是讓人有種"眾里尋他千百度,驀然回首,那人卻在,燈火闌珊處”的開(kāi)發(fā)框架

按照這個(gè)目標(biāo)去設(shè)計(jì)

  • 雖然整體體量比較大,但是它的每個(gè)模塊都分得非常小,因此非常容易掌握
  • 它的各種組件都可以方便的進(jìn)行擴(kuò)展,通過(guò)擴(kuò)展可以不斷的提升系統(tǒng)的處理能力
  • 它的工具已經(jīng)非常強(qiáng)大,而且它還是變得更加強(qiáng)大。
  • 不管是管理臺(tái)還是過(guò)濾器、Servlet,不管是流程組件還是UI組件,還是UI組件包等等都是可以自組裝的
  • Web工程只是個(gè)集合,除了配置文件和Pom依賴(lài),不應(yīng)該有其它東西
  • 支持水平擴(kuò)展,同時(shí)可以支持7*24小時(shí)運(yùn)行
  • 開(kāi)始團(tuán)隊(duì)由金字塔向啞鈴型轉(zhuǎn)變,高低水平者各司其職
  • 絕大多數(shù)情況下,要做的只是依賴(lài),而不需進(jìn)行配置

這樣去打造框架——設(shè)計(jì)原則梳理

1. COC原則

Tiny框架在設(shè)計(jì)時(shí)充分考慮此原則,凡是可以通過(guò)一定的約定來(lái)大大減少配置或開(kāi)發(fā)量的,一般都會(huì)采用。所以在Tiny框架的擴(kuò)展、開(kāi)發(fā)、配置過(guò)程中,會(huì)經(jīng)常發(fā)現(xiàn)一些“潛規(guī)則”,如果利用好這些“潛規(guī)則”,會(huì)起起事半功倍的效果。無(wú)標(biāo)簽評(píng)論用戶(hù)圖標(biāo): cskang蔡少康發(fā)表:Convention over Configuration(CoC)–慣例優(yōu)于配置原則簡(jiǎn)單點(diǎn)說(shuō),就是將一些公認(rèn)的配置方式和信息作為內(nèi)部缺省的規(guī)則來(lái)使用。例如,Hibernate的映射文件,如果約定字段名和類(lèi)屬性一致的話(huà),基本上就可以不要這個(gè)配置文件了。你的應(yīng)用只需要指定不convention的信息即可,從而減少了大量convention而又不得不花時(shí)間和精力啰里啰嗦的東西,配置文件很多時(shí)候相當(dāng)?shù)挠绊戦_(kāi)發(fā)效率。

Rails 中很少有配置文件(但不是沒(méi)有,數(shù)據(jù)庫(kù)連接就是一個(gè)配置文件),Rails 的fans號(hào)稱(chēng)期開(kāi)發(fā)效率是 java 開(kāi)發(fā)的 10倍,估計(jì)就是這個(gè)原因。Maven也使用了CoC原則,當(dāng)你執(zhí)行mvn -compile命令的時(shí)候,不需要指源文件放在什么地方,而編譯以后的class文件放置在什么地方也沒(méi)有指定,這就是CoC原則。

2. DRY“不要重復(fù)自己”原則

Tiny框架的構(gòu)建者對(duì)于做重復(fù)的事情一向是深?lèi)和唇^的,因此非常不原意開(kāi)發(fā)人員在基于Tiny框架進(jìn)行開(kāi)發(fā)時(shí)出現(xiàn)重復(fù)的內(nèi)容。為此Tiny框架在設(shè)計(jì)上做了大量的工作,來(lái)避免程序員做違反DRY原則的內(nèi)容,所以在Tiny框架中,所有的工作內(nèi)容都是做一次就足夠。無(wú)標(biāo)簽評(píng)論用戶(hù)圖標(biāo):cskang蔡少康發(fā)表:

DRY——Don't RepeatYourself Principle,直譯為“不要重復(fù)自己”原則^_^

DRY簡(jiǎn)而言之,就是不要寫(xiě)重復(fù)的代碼。原則本身很簡(jiǎn)單,但是,對(duì)于OOAD來(lái)說(shuō),有著非常重大的意義。

DRY利用的方法就是抽象:把共同的事物抽象出來(lái),把代碼抽取到一個(gè)地方去。這樣就可以避免寫(xiě)重復(fù)的代碼。

舉一個(gè)DRY的典型例子,如果在一個(gè)類(lèi)構(gòu)造的時(shí)候,需要進(jìn)行成員的初始化,在進(jìn)行了某些操作以后,同樣要進(jìn)行初始化,那么就可以把“初始化”抽象出來(lái),做成一個(gè)方法Initial(),在構(gòu)造和需要用到的地方調(diào)用它。

雖然,抽取重復(fù)代碼是利用DRY的一個(gè)好的開(kāi)端,但DRY的實(shí)質(zhì)是,一個(gè)需求,用一個(gè)部分來(lái)完成。當(dāng)你試圖避免重復(fù)代碼的時(shí)候,實(shí)際上,你做的應(yīng)該是用一段代碼來(lái)完成一個(gè)需求。

為什么要用DRY原則?DRY會(huì)給代碼維護(hù)帶來(lái)很大的好處。以類(lèi)的初始化為例,假設(shè)類(lèi)修改了,增加、減少或是修改了成員,如果不寫(xiě)Initial(),那么你可能至少要修改兩處,而且,修改之處也可能出現(xiàn)不一致,維護(hù)成本大大增加。而寫(xiě)了Initial()方法,那么只要集中修改Initial()就行了。

既然DRY是關(guān)于“一個(gè)方法,實(shí)現(xiàn)一個(gè)需求”的,那么,是不是可以把DRY應(yīng)用到需求分析中?呵呵,答案是肯定的,而且,個(gè)人認(rèn)為,這是個(gè)非常好的主意。多個(gè)重復(fù)的需求可能導(dǎo)致多個(gè)重復(fù)或者相近的類(lèi),最后導(dǎo)致重復(fù)代碼。所以DRY絕不僅僅對(duì)代碼適用,它是一個(gè)廣泛適用的原則。

3. SUBTRACTION減法原則

減法原則是我們自己提出的,意思就是給程序員做減法。一般來(lái)說(shuō)越到底層的程序員,工作時(shí)間越短、技能越弱、經(jīng)驗(yàn)越少。但是實(shí)際工作當(dāng)中,你會(huì)發(fā)現(xiàn)越到底層的程序員要做的事情越多,要用的技能也越多。Tiny構(gòu)建者認(rèn)為,這也是現(xiàn)在程序員工作效率低、質(zhì)量差的重要原因。因此我們認(rèn)為應(yīng)該給程序員做減法,越到底層的程序員做的事情要越單一、越簡(jiǎn)單。

4. 下級(jí)服從上級(jí)原則

可能有人在笑了,這個(gè)也算原則?確實(shí),它就是原則,只不過(guò)原來(lái)下級(jí)服務(wù)上級(jí)是掛在嘴上的,而Tiny框架則從框架層級(jí)做了限制,使得下級(jí)必須服務(wù)上級(jí)。這兩點(diǎn)主要體現(xiàn)在流程及頁(yè)面實(shí)現(xiàn)中,上級(jí)經(jīng)理可以對(duì)下級(jí)完成的工作內(nèi)容進(jìn)行強(qiáng)制性要求實(shí)現(xiàn),不同的是流程是采用顯式繼承的方式,而頁(yè)面是隱式繼承的方式

5. 單一原則

幾乎每個(gè)熟悉Tiny框架的人可能會(huì)問(wèn)同一個(gè)問(wèn)題,那就是:為什么Tiny分了這么多的工程?Tiny框架的構(gòu)建者也深深的知道這樣會(huì)增加相當(dāng)?shù)募晒ぷ鳎沁@樣做的好處是可以把單一原則進(jìn)行強(qiáng)制性的約束,使得一個(gè)模塊只解決單一模塊應(yīng)該解決的問(wèn)題,從而避免不同的問(wèn)題放在一起解決所導(dǎo)致的胡子眉毛縷不清的問(wèn)題,同時(shí)也避免了不恰當(dāng)?shù)囊蕾?lài)及模板引用。

6. 模塊化與自動(dòng)組裝原則

一般的軟件開(kāi)發(fā),整個(gè)集成過(guò)程都需要人員小心翼翼,要配這個(gè)配那個(gè),稍不小心就會(huì)有這種那樣問(wèn)題的出現(xiàn)Tiny框架構(gòu)建者也常常知道這一點(diǎn)給集成人員帶來(lái)的困難及給軟件開(kāi)發(fā)測(cè)試帶來(lái)的巨大的工作量,因此在整個(gè)Tiny框架的構(gòu)建過(guò)程中,都非常注重集成過(guò)程的自動(dòng)組裝,要求做到扔進(jìn)去不用管,由框架自動(dòng)集成。Tiny框架構(gòu)建者深深知道,模塊化對(duì)于軟件開(kāi)發(fā)過(guò)程中開(kāi)發(fā)、高度、集成、發(fā)布、維護(hù)過(guò)程中所起的作用及節(jié)省或花費(fèi)的巨大成本。因此提出了業(yè)務(wù)單元(Business Unit)的概念,使得與模塊相關(guān)的所有內(nèi)容都可以放在一起。

7. 集中配置原則

在Tiny構(gòu)建者多年的工作過(guò)程中,被配置的問(wèn)題所常常困擾,在開(kāi)發(fā)期有許多問(wèn)題是由于配置不當(dāng)引起,在測(cè)試在發(fā)布及升級(jí)過(guò)程中,也有相當(dāng)多的問(wèn)題是由于配置不當(dāng)引起的。在Tiny框架我們對(duì)配置做了大量的工作,一個(gè)是COC方式,如果不配,則采用系統(tǒng)默認(rèn)的值;一個(gè)是集中原則:把需要人工需要配置的內(nèi)容都集中起來(lái)統(tǒng)一配置;一個(gè)是對(duì)于不需要人工干預(yù)的配置,那就集成在Jar包中,作為發(fā)布者發(fā)布項(xiàng)的一部分。