大師之所以稱之為大師,就是因為站的高度跟普通人不一樣。
Martin Fowler在《企業(yè)應(yīng)用架構(gòu)模式》中將企業(yè)應(yīng)用的模式分為三種:事務(wù)腳本、表模塊、領(lǐng)域模型,這三種模式是對應(yīng)用程序開發(fā)方式的高度抽象。
因為大師的思維高度,加之翻譯成中文之后的蹩腳名詞,很久才對這三種模式有了一些認(rèn)識,本文講講個人的理解,不對之處請您指正。
一、事務(wù)腳本
首先這種模式,從字面上來看上事務(wù)驅(qū)動的,而且上通過腳本來實現(xiàn)的。對于剛剛開始程序開發(fā)的新手來說,這種模式上最被常用的,因為它最簡單,最容易理解。
例如:做一個查詢的小程序,那么首先會考慮用戶輸入查詢值,點(diǎn)擊查詢按鈕,然后程序通過SQL語句到數(shù)據(jù)庫查詢,查詢返回結(jié)果到界面顯示。這樣一個用例通過線性的腳本來思考,實現(xiàn)時也通過這流程進(jìn)行。
二、表模塊
這種模式比較看重數(shù)據(jù)庫,先考慮好有哪些數(shù)據(jù)要管理,然后設(shè)計好數(shù)據(jù)庫表,剩下的就是增刪改查的代碼和界面了。
例如:做一個選課系統(tǒng),首先考慮要有課堂、課程、教師、學(xué)生、教師與課堂關(guān)系、學(xué)生選課信息等等這些數(shù)據(jù),然后設(shè)計出數(shù)據(jù)庫表,再實現(xiàn)對這些數(shù)據(jù)庫表增刪改查的界面和數(shù)據(jù)庫訪問代碼。
三、領(lǐng)域模型
這種模式上最符合面向?qū)ο蟮模瑥念I(lǐng)域?qū)樱I(yè)務(wù)層)入手考慮,將領(lǐng)域模型抽象,建立Class,然后再考慮數(shù)據(jù)庫如何保存,UI如何設(shè)計。
例如:上述選課系統(tǒng),不是先考慮數(shù)據(jù)庫,而是各領(lǐng)域?qū)ο髸心男?,通過類的關(guān)系來表示業(yè)務(wù)對象之間的關(guān)系,例如課堂類會有教師屬性、所選課學(xué)生列表對象等。
事務(wù)腳本模式上最容易理解的,軟件開發(fā)入門者就是這樣的思路,實現(xiàn)最容易,但是最經(jīng)不起需求的變化。
表模塊模式上.NET幫派最喜歡的模式,微軟推崇的DataSet、DataTable從UI一直貫穿到DB,感覺在UI上操作數(shù)據(jù)庫表一樣,超級簡單,甚至有些控件直接綁定,代碼不需要自己寫多少,VS IDE和控件幫開發(fā)者搞定了,但是其實這樣會把程序員“慣壞了”,雖然開發(fā)容易,但是對原理不夠理解,對面向?qū)ο蟮乃枷敫鼰o法深入了解。雖然本人也上.NET幫派,但是一直認(rèn)為需要向Java陣營學(xué)習(xí)的東西太多了。個人以為要理解面向?qū)ο螅M量遠(yuǎn)離DataTable。
對于企業(yè)應(yīng)用中最有價值的就是業(yè)務(wù)領(lǐng)域?qū)?,技術(shù)實現(xiàn)上最多就是數(shù)據(jù)庫的增刪改查和UI,它的特點(diǎn)明顯與其他類型的軟件開發(fā),如系統(tǒng)應(yīng)用、多媒體、游戲等不同。業(yè)務(wù)的地位尤其重要,表現(xiàn)在業(yè)務(wù)復(fù)雜性、多變性兩個方面,而面向?qū)ο蟮拈_發(fā)思想正式應(yīng)對這類問題的,抽象、復(fù)用、適應(yīng)變化等特點(diǎn)在處理起這種復(fù)雜業(yè)務(wù)的應(yīng)用系統(tǒng)時相比其他模式更加便利。
對于三種模式,個人認(rèn)為適用于不同規(guī)模的應(yīng)用開發(fā),簡單的小程序可以考慮事務(wù)腳本模式將會節(jié)省設(shè)計的工作量,對于業(yè)務(wù)規(guī)模不大、領(lǐng)域邏輯變化不大的應(yīng)用可使用表模塊、而對于業(yè)務(wù)復(fù)雜、需求多面的應(yīng)用建議使用更加面向?qū)ο蟮念I(lǐng)域模型進(jìn)行設(shè)計。