狂人思維·成都
          Google
          軟件架構(gòu),開則持續(xù),合則穩(wěn)健;亦開亦合,剛?cè)岵?jì);講究平衡如同生活之中庸和諧.
          E-MAIL:guojian。zhang@gmail。com
          posts - 19,  comments - 62,  trackbacks - 0

          最近在javaEye上看到有關(guān)Domain Driving Model Design的激烈討論,讓我對(duì)DOMAIN MODEL的理解更深刻了不少,趁現(xiàn)在意猶未盡之際,結(jié)合我在項(xiàng)目中的實(shí)際經(jīng)驗(yàn)將討論中的一些結(jié)論摘錄并總結(jié)出來:

          首先引用說明一下Domain Model 的定義:

          Domain Model An object model of the domain that incorporates both behavior and data.

          Domain Model 分兩種:

          1  Simple Domain Model (Active Record)

          它的特點(diǎn)是POJOTABLE STRUCTURE一一對(duì)應(yīng),建模基于數(shù)據(jù)庫設(shè)計(jì)。Hibernate走的就是這個(gè)路子,說它貧血,意思就是指它只有data,沒有behavior(但我們實(shí)際可以通過HBM文件的定義和映射,在PO中適當(dāng)?shù)募尤胍恍┗镜臉I(yè)務(wù)邏輯的。)

          在這種模式下,POJO自己的CRUD操作都應(yīng)該放在自己的類里面。其他復(fù)雜的業(yè)務(wù)邏輯會(huì)放到外面的Service layer

          2  Rich Domain Model (Data Mapper)

          它的特點(diǎn)是POJOTABLE STRUCTURE并不一一對(duì)應(yīng),建模天馬行空,完全取決于業(yè)務(wù)邏輯。domain objecttable之間的mapping,由Data Mapper完成,domain object不用管數(shù)據(jù)表是何等結(jié)構(gòu),甚至不用管Data Mapper怎么操作。

           

          1.識(shí)別某種業(yè)務(wù)行為的一個(gè)很確定的原則:

                 domain logic只應(yīng)該和這一個(gè)domain object實(shí)例狀態(tài)(并非“持久”狀態(tài))有關(guān),而不應(yīng)該和一批domain object的狀態(tài)有關(guān).

          進(jìn)一步的說:主要看logic是否只和這個(gè)object(注:指自身)的狀態(tài)有關(guān),如果只和這個(gè)object(注:指自身)有關(guān),就是domain logic;如果logic是和一批domain object(注:指同類型的實(shí)體)的狀態(tài)有關(guān),就不是domain logic,而是business logic

           

          2.Domain Model Hibernate PO 的區(qū)別:

          領(lǐng)域模型的代碼實(shí)現(xiàn)需要用一組互相協(xié)作的類來完成,每一個(gè)或者一組類承擔(dān)這個(gè)領(lǐng)域模型的某個(gè)特征。而Hibernate的實(shí)體類只不過是其中的一組類,它承擔(dān)的職責(zé)就是保持領(lǐng)域模型的狀態(tài)的。

           

          3.基于Domain Model 分析與設(shè)計(jì)的方法規(guī)則:

          應(yīng)該由領(lǐng)域模型來驅(qū)動(dòng)你的軟件內(nèi)在規(guī)則,由需求驅(qū)動(dòng)你的軟件外在交互.

           

          最后,我想補(bǔ)充的是:根據(jù)目前的O/R Mapping技術(shù),我們?cè)趯?shí)際項(xiàng)目開發(fā)中,能真正做到 富領(lǐng)域模型 還不現(xiàn)實(shí)(因?yàn)槲覀冞€要考慮諸如性能、目前O/R持久化特性等等問題),更何況,我們的MODEL DATA最終需要被持久化,因此,我比較反對(duì)在DOMAIN MODEL 中直接通過任何方式做任何持久化操作,因?yàn)檫@會(huì)讓你所設(shè)計(jì)的MODEL無法獨(dú)立化,難以單元測(cè)試,并且與加入了一些外界無關(guān)的東西,這不符合對(duì)象的本質(zhì)(對(duì)象本身是不能持久化的)。雖然我們做不到完整意義上的Domain Driving Model Development,但我們可以在項(xiàng)目實(shí)際開發(fā)中因?yàn)樾阅堋⒔Y(jié)構(gòu)簡(jiǎn)化等等上面得到補(bǔ)償,這已經(jīng)值得欣慰了。

          posted on 2005-04-07 09:44 狂人思維·成都 閱讀(1838) 評(píng)論(5)  編輯  收藏 所屬分類: JAVA技術(shù)J2EE應(yīng)用

          FeedBack:
          # re: Domain Driving Model Design之總結(jié)與我的選擇
          2005-04-07 13:47 | floerggyy
          好,又長(zhǎng)見識(shí)了,還有什么心得快貼出來 ̄ ̄ ̄ ̄靠  回復(fù)  更多評(píng)論
            
          # re: Domain Driving Model Design之總結(jié)與我的選擇
          2005-04-09 15:04 | idior
          good, 原來Hibenate是這樣的我說怎么覺得它沒怎么談行為呢.不是很喜歡.
          目前有比較成熟的Rich的ORM嗎?  回復(fù)  更多評(píng)論
            
          # re: Domain Driving Model Design之總結(jié)與我的選擇
          2005-04-23 18:33 | calvin
          hibernate根本不是active record,而是第2種模式。因?yàn)樗蚑opLink,JDO一樣,需要Entity Managger,也就是session,在那里讀取hbm,so PO和數(shù)據(jù)庫的解耦程度是很高的,特別是在H3里面。
          Active Record在Rails里有真正的實(shí)現(xiàn)。他可以執(zhí)行g(shù)ood.save(),而不是session.save(goods);  回復(fù)  更多評(píng)論
            
          # re: Domain Driving Model Design之總結(jié)與我的選擇
          2005-05-06 16:32 | floer
          @re calvin:
          不知道有哪個(gè)項(xiàng)目實(shí)現(xiàn)了 active record ?
          @re 狂人思維:
          不知道有哪個(gè)項(xiàng)目實(shí)現(xiàn)了 active record ?
            回復(fù)  更多評(píng)論
            
          # re: Domain Driving Model Design之總結(jié)與我的選擇
          2005-05-10 15:34 | ShiningRay
          為什么對(duì)象不能被持久化?  回復(fù)  更多評(píng)論
            

          <2005年4月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567

          常用鏈接

          留言簿

          隨筆分類(31)

          隨筆檔案(19)

          文章分類(3)

          文章檔案(3)

          我關(guān)注的Blogs

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 黄大仙区| 龙南县| 曲阳县| 河北省| 共和县| 石首市| 靖州| 石景山区| 县级市| 玉田县| 新河县| 焉耆| 新绛县| 睢宁县| 永宁县| 同德县| 上蔡县| 唐山市| 沁阳市| 克山县| 蒲江县| 保德县| 兰考县| 平山县| 海门市| 修文县| 高尔夫| 牙克石市| 浠水县| 青神县| 宽甸| 明水县| 新余市| 清流县| 揭阳市| 汕尾市| 横峰县| 鹰潭市| 普陀区| 乌什县| 那坡县|