Eric認(rèn)為:服務(wù)Service是描述領(lǐng)域概念最自然的方式,是四色原型的MI原型的延續(xù), 優(yōu)秀服務(wù)3個特征:
1.與領(lǐng)域概念相關(guān)的操作行為、但不是實(shí)體和值對象中固有的部分。
2.接口根據(jù)領(lǐng)域模型中其他元素定義
3.操作是無狀態(tài)的。
在JiveJdon3中,com.jdon.jivejdon.service.ForumService和Forum實(shí)體模型及其值對象ForumState共同完成領(lǐng)域模型,其中ForumService屬于應(yīng)用服務(wù)層;而后兩者屬于領(lǐng)域?qū)?;其他服?wù)ForumMessageService、AccountService和UploadService等都是此類性質(zhì)。
領(lǐng)域?qū)ο蟮纳芷赟cope
Spring 1.x剛出來時確實(shí)忽悠了大家一把,因?yàn)樗麤]有領(lǐng)域?qū)ο蟮纳芷谥С郑钡絊pring 2.0才將如new Bean scope,當(dāng)初那些瘋狂捧Spring 1.x 臭腳的所謂高手是不是還是基于數(shù)據(jù)庫驅(qū)動的思維,根本沒有真正OO模式思維,當(dāng)今天JBoss Seam、Scopes等框架開始重視對象生命周期支持后,曾經(jīng)發(fā)生在Jdon社區(qū)爭戰(zhàn)硝煙已經(jīng)過去,成為歷史。
Eric認(rèn)為:每個對象獨(dú)有器生命周期,一個對象在創(chuàng)建以后,可能要經(jīng)歷各種不同的狀態(tài),并最終消亡。 對象生命周期由長短:臨時對象;常駐內(nèi)存;有的與其他對象存在復(fù)雜的依賴關(guān)系;狀態(tài)變化時必須滿足一些不變量的約束條件。 如何管理這些對象提出挑戰(zhàn)!處理不好會偏離MDD的方向。
在生命周期中維護(hù)對象的完整性。避免模型由于管理生命周期的復(fù)雜性而陷入困境。有 三個模式來處理:聚合(Aggregate):定義清晰的所有權(quán)和邊界使模型更加緊湊,避免出現(xiàn)盤根錯節(jié)的對象關(guān)系網(wǎng);工廠(Factory)和組合(Respository)。
當(dāng)一個對象生命周期之始,使用工廠和組合提供了訪問和控制模型對象的方法,完善了MDD。 建立聚合的模型,并且把工廠和組合加入設(shè)計中來,可以使我們系統(tǒng)地對模型對象進(jìn)行管理。 聚合圈出一個范偉,在這個范圍中,對象無論在哪個生命周期,保持不變性。
在JiveJdon3.0中,值對象ForumState是被聚合在實(shí)體模型Forum中,F(xiàn)orum作為ForumState的一個根,由于它們數(shù)據(jù)必須保持一致性,不變量(invariant)是指無論何時發(fā)生數(shù)據(jù)變化必須滿足一致性規(guī)則,由于根控制了訪問,就無法繞過它修改內(nèi)部元素,例如,如果沒有Forum實(shí)體對象這個根,就無法去修改對象狀態(tài)ForumState,F(xiàn)orumState獲得是通過Forum的getter方法獲得的。
ForumState和Forum的分離有可以使修改論壇狀態(tài)數(shù)據(jù)(當(dāng)發(fā)一個新帖時,必須更新當(dāng)前論壇的最新帖子為該新帖),不會影響到Forum其他元素,特別是使用事務(wù)鎖定時,不必鎖住整個對象,見"領(lǐng)域驅(qū)動設(shè)計"書籍P92。
另外,F(xiàn)orumThread和ForumMessage的關(guān)聯(lián)關(guān)系必設(shè)定成單向的,而不是雙向的,因?yàn)轭I(lǐng)域建模中,關(guān)聯(lián)越簡單越好。
1.與領(lǐng)域概念相關(guān)的操作行為、但不是實(shí)體和值對象中固有的部分。
2.接口根據(jù)領(lǐng)域模型中其他元素定義
3.操作是無狀態(tài)的。
在JiveJdon3中,com.jdon.jivejdon.service.ForumService和Forum實(shí)體模型及其值對象ForumState共同完成領(lǐng)域模型,其中ForumService屬于應(yīng)用服務(wù)層;而后兩者屬于領(lǐng)域?qū)?;其他服?wù)ForumMessageService、AccountService和UploadService等都是此類性質(zhì)。
領(lǐng)域?qū)ο蟮纳芷赟cope
Spring 1.x剛出來時確實(shí)忽悠了大家一把,因?yàn)樗麤]有領(lǐng)域?qū)ο蟮纳芷谥С郑钡絊pring 2.0才將如new Bean scope,當(dāng)初那些瘋狂捧Spring 1.x 臭腳的所謂高手是不是還是基于數(shù)據(jù)庫驅(qū)動的思維,根本沒有真正OO模式思維,當(dāng)今天JBoss Seam、Scopes等框架開始重視對象生命周期支持后,曾經(jīng)發(fā)生在Jdon社區(qū)爭戰(zhàn)硝煙已經(jīng)過去,成為歷史。
Eric認(rèn)為:每個對象獨(dú)有器生命周期,一個對象在創(chuàng)建以后,可能要經(jīng)歷各種不同的狀態(tài),并最終消亡。 對象生命周期由長短:臨時對象;常駐內(nèi)存;有的與其他對象存在復(fù)雜的依賴關(guān)系;狀態(tài)變化時必須滿足一些不變量的約束條件。 如何管理這些對象提出挑戰(zhàn)!處理不好會偏離MDD的方向。
在生命周期中維護(hù)對象的完整性。避免模型由于管理生命周期的復(fù)雜性而陷入困境。有 三個模式來處理:聚合(Aggregate):定義清晰的所有權(quán)和邊界使模型更加緊湊,避免出現(xiàn)盤根錯節(jié)的對象關(guān)系網(wǎng);工廠(Factory)和組合(Respository)。
當(dāng)一個對象生命周期之始,使用工廠和組合提供了訪問和控制模型對象的方法,完善了MDD。 建立聚合的模型,并且把工廠和組合加入設(shè)計中來,可以使我們系統(tǒng)地對模型對象進(jìn)行管理。 聚合圈出一個范偉,在這個范圍中,對象無論在哪個生命周期,保持不變性。
在JiveJdon3.0中,值對象ForumState是被聚合在實(shí)體模型Forum中,F(xiàn)orum作為ForumState的一個根,由于它們數(shù)據(jù)必須保持一致性,不變量(invariant)是指無論何時發(fā)生數(shù)據(jù)變化必須滿足一致性規(guī)則,由于根控制了訪問,就無法繞過它修改內(nèi)部元素,例如,如果沒有Forum實(shí)體對象這個根,就無法去修改對象狀態(tài)ForumState,F(xiàn)orumState獲得是通過Forum的getter方法獲得的。
ForumState和Forum的分離有可以使修改論壇狀態(tài)數(shù)據(jù)(當(dāng)發(fā)一個新帖時,必須更新當(dāng)前論壇的最新帖子為該新帖),不會影響到Forum其他元素,特別是使用事務(wù)鎖定時,不必鎖住整個對象,見"領(lǐng)域驅(qū)動設(shè)計"書籍P92。
另外,F(xiàn)orumThread和ForumMessage的關(guān)聯(lián)關(guān)系必設(shè)定成單向的,而不是雙向的,因?yàn)轭I(lǐng)域建模中,關(guān)聯(lián)越簡單越好。