Martin Fowler作序說;“希望本書是一本非常有影響力的書籍,....... Eric最值得我尊敬的一個(gè)方面是他敢于討論還未取得成功的事情”,其實(shí),時(shí)值今年2006年,DDD開發(fā)框架已經(jīng)層出不窮(如RoR、RIFE、JdonFramework等),我們項(xiàng)目軟件包結(jié)構(gòu)都變成了這樣:xxx.model;xxx.service,DDD思想已經(jīng)遍地開花,不能再說不成功了。
DDD是告訴我們?nèi)绾巫龊脴I(yè)務(wù)層!并以領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)思想來選擇和合適的框架,以基于JdonFramework開發(fā)的JiveJdon3.0說明DDD方法的實(shí)戰(zhàn)應(yīng)用。
首先必須認(rèn)識(shí)到:領(lǐng)域建模是一種藝術(shù)的技術(shù),不是數(shù)學(xué)的技術(shù),它是用來解決復(fù)雜軟件快速應(yīng)付變化的解決之道(快速適應(yīng)需求變化的軟件復(fù)用)。
我們知道軟件的產(chǎn)生過程是:分析、設(shè)計(jì)、編程、測(cè)試、部署。過去,分析領(lǐng)域和軟件設(shè)計(jì)是分裂的,分析人員從領(lǐng)域中收集基本概念;而設(shè)計(jì)必須指明一組能北項(xiàng)目中適應(yīng)編程工具構(gòu)造的組件,這些組件必須能夠在目標(biāo)環(huán)境中有效執(zhí)行,并能夠正確解決應(yīng)用程序出現(xiàn)的問題。 模型驅(qū)動(dòng)設(shè)計(jì)(Model-Driven Design)拋棄了分裂分析模型與設(shè)計(jì)的做法,使用單一的模型來滿足這兩方面的要求。這就是領(lǐng)域模型。
單一的領(lǐng)域模型同時(shí)滿足分析原型和軟件設(shè)計(jì),如果一個(gè)模型實(shí)現(xiàn)時(shí)不實(shí)用,重新尋找新模型。如果模型沒有忠實(shí)表達(dá)領(lǐng)域關(guān)鍵概念時(shí),也必須重新尋找新的模型。 建模和設(shè)計(jì)成為單個(gè)迭代循環(huán)。將領(lǐng)域模型和設(shè)計(jì)緊密聯(lián)系。因此,建模專家必須懂設(shè)計(jì),會(huì)編程。
分層架構(gòu)
最初層次只分為三層:表現(xiàn)層、業(yè)務(wù)層和持久層;DDD其實(shí)告訴我們?nèi)绾巫寣?shí)現(xiàn)業(yè)務(wù)層!
一位網(wǎng)友曾經(jīng)請(qǐng)教層次的職責(zé),對(duì)服務(wù)Service提出疑問。根據(jù)Eric的理論,業(yè)務(wù)層將細(xì)分為兩個(gè)層次:應(yīng)用層和領(lǐng)域?qū)。它們的定義是:應(yīng)用層:定義軟件可以完成的工作,并且指揮具有豐富含義的領(lǐng)域?qū)ο髞斫鉀Q問題,保持精練;不包括業(yè)務(wù)規(guī)則或知識(shí),無業(yè)務(wù)情況的狀態(tài); 領(lǐng)域?qū)樱贺?fù)責(zé)表示業(yè)務(wù)概念、業(yè)務(wù)狀態(tài)的信息和業(yè)務(wù)規(guī)則,是業(yè)務(wù)軟件核心。
層次之間必須清晰分離,每個(gè)層都是內(nèi)聚的,并且只依賴它的下層,為了實(shí)現(xiàn)各層的最大解耦,Ioc模式和Ioc容器是目前最好的選擇,JdonFramework使用基于PicoContainer的Ioc容器實(shí)現(xiàn)了各層的松耦合;
Eric特別指出:那種將業(yè)務(wù)邏輯交由業(yè)務(wù)界面處理的快速UI方式是旁門左道。希望象C/S結(jié)構(gòu)那樣可視化拖拖圖形就完成的軟件開發(fā)是一種錯(cuò)誤的方向,開發(fā)時(shí)快速,難于維護(hù)和擴(kuò)展,雖然使用J2EE技術(shù),其實(shí)是一種偽多層技術(shù)。可惜,有很多國(guó)人在瘋狂開發(fā)這類工具,大有不撞南墻不低頭之勢(shì),并且瘋狂誤導(dǎo)很多非專業(yè)人士,可悲可嘆!如果對(duì)這段言論持不同意見,建議你購(gòu)買"領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)"這本譯書,見P53頁。
領(lǐng)域模型種類
傳統(tǒng)模型分為兩種:實(shí)體(Entity)和值對(duì)象(Value Object),現(xiàn)在服務(wù)(Service)成為第三種模型元素。
實(shí)體(Entity)定義:通過一系列連續(xù)性(continuity)和標(biāo)識(shí)(identity ID)來定義;個(gè)人認(rèn)為它和分析領(lǐng)域的四色原型中的PPT原型非常類似,可以看成是PPT原型延續(xù)。