基于項(xiàng)目的最差實(shí)踐,可以總結(jié)出一套項(xiàng)目架構(gòu)的最佳實(shí)踐原則以便今后的復(fù)用和改進(jìn)。
原則1. 時(shí)間總是非常緊,需求總是在變化,技術(shù)問(wèn)題總是層出不窮,千萬(wàn)不要認(rèn)為軟件工程的問(wèn)題不會(huì)發(fā)生在規(guī)范的公司和項(xiàng)目。每次一定要根據(jù)自己所處的位置作出正確的評(píng)估,比如項(xiàng)目經(jīng)理做評(píng)估要留出足夠的時(shí)間buffer,開(kāi)發(fā)人員應(yīng)當(dāng)正確評(píng)價(jià)自己的工作量,盡可能開(kāi)始工作。
原則2. 項(xiàng)目架構(gòu)必須得完成基本的內(nèi)容,即使時(shí)間非常的緊迫。以一個(gè)三層架構(gòu)的企業(yè)級(jí)網(wǎng)站來(lái)說(shuō),數(shù)據(jù)庫(kù)建模,頁(yè)面流程圖和業(yè)務(wù)邏輯的sequence圖是必須的。
原則3. 數(shù)據(jù)庫(kù)模型一定要盡早考慮,,無(wú)論是采用DDD還是TDD,數(shù)據(jù)庫(kù)都是基石,尤其是采用hibernate這樣的工具,數(shù)據(jù)庫(kù)的建立意味著可以采用工具生成PO, DAO,那意味著你已經(jīng)完成了20%的工作。
原則4. 使用中間的業(yè)務(wù)邏輯層。常??吹紸ction中直接調(diào)用dao編寫(xiě)業(yè)務(wù)邏輯的例子,這樣做并非不可以,在一些小型的項(xiàng)目中能夠節(jié)省時(shí)間,但在大型項(xiàng)目中,業(yè)務(wù)邏輯集成在action會(huì)導(dǎo)致可維護(hù)性變差,舉例而言,比如客戶臨時(shí)變更需求需要將某項(xiàng)業(yè)務(wù)邏輯作為web service對(duì)外發(fā)A布;而后者的優(yōu)勢(shì)就顯現(xiàn)了,只需要添加額外的包,重啟運(yùn)行測(cè)試的工作不涉及新包以外的代碼,當(dāng)然也就能減少系統(tǒng)的故障率。
原則5. 對(duì)中間的業(yè)務(wù)邏輯層,采用面向接口編程。很多人不知道spring提倡的面向接口編程在哪里使用,于是到處都用,事實(shí)上,使用得不好常常會(huì)因?yàn)榻涌诤蛯?shí)現(xiàn)的變動(dòng)而造成困擾,正確的做法是:將業(yè)務(wù)邏輯抽象出來(lái)作為接口,這套接口一定要像數(shù)據(jù)庫(kù)一樣千錘百煉,好的接口能更好的適應(yīng)變化。業(yè)務(wù)邏輯層的穩(wěn)固有助于工作的分離和解耦,一旦接口定義出來(lái),開(kāi)發(fā)struts和業(yè)務(wù)邏輯的人就可以分開(kāi)并行工作,并且相互的變動(dòng)不會(huì)受到影響,被非常好的分離了,所以,中間的業(yè)務(wù)層接口定義,是第二層基石,與數(shù)據(jù)庫(kù)一起構(gòu)成了三層結(jié)構(gòu),二層基石。
原則6. 美工頁(yè)面要先于編寫(xiě)jsp完成。雖然說(shuō)MVC的使用有助于分離美工與開(kāi)發(fā)者,但是有的工作未必能完全并行,美工的頁(yè)面需要基于pageflow完成,而頁(yè)面的布局和樣式需要得到客戶認(rèn)可,因此一定要盡早引入美工,當(dāng)美工完成靜態(tài)頁(yè)面時(shí),開(kāi)發(fā)jsp才不會(huì)浪費(fèi)時(shí)間,否則,常常會(huì)因?yàn)轫?yè)面而影響到控制邏輯。
原則7. 采用統(tǒng)一的架構(gòu),預(yù)先寫(xiě)好基礎(chǔ)代碼。統(tǒng)一架構(gòu)對(duì)于項(xiàng)目的可維護(hù)性尤為重要,比如讀取日志,讀取配置,基礎(chǔ)DAO,基礎(chǔ)ACTION,基礎(chǔ)FORM等等?;A(chǔ)的架構(gòu)減少了不必要的重復(fù)工作,加快了項(xiàng)目開(kāi)發(fā)速度,其重要層度,是我每次都必然強(qiáng)調(diào)的。也正因?yàn)槿绱?,該文章的系列將?huì)連載架構(gòu)一個(gè)項(xiàng)目的基礎(chǔ)代碼。
原則8. 如果不是非常特別的需要,盡量不要過(guò)多的使用代碼生成工具。代碼生成工具能夠極大的提高編程效率,但是,如果不熟悉生成工具所采用的組件及配置,那么盡量不要使用,當(dāng)生成的大量代碼不能根據(jù)你的定制化復(fù)用或工作時(shí),相信你只有欲哭無(wú)淚了。