狂人思維·成都
          Google
          軟件架構,開則持續,合則穩健;亦開亦合,剛柔并濟;講究平衡如同生活之中庸和諧.
          E-MAIL:guojian。zhang@gmail。com
          posts - 19,  comments - 62,  trackbacks - 0

          最近在javaEye上看到有關Domain Driving Model Design的激烈討論,讓我對DOMAIN MODEL的理解更深刻了不少,趁現在意猶未盡之際,結合我在項目中的實際經驗將討論中的一些結論摘錄并總結出來:

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

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

          Domain Model 分兩種:

          1  Simple Domain Model (Active Record)

          它的特點是POJOTABLE STRUCTURE一一對應,建模基于數據庫設計。Hibernate走的就是這個路子,說它貧血,意思就是指它只有data,沒有behavior(但我們實際可以通過HBM文件的定義和映射,在PO中適當的加入一些基本的業務邏輯的。)

          在這種模式下,POJO自己的CRUD操作都應該放在自己的類里面。其他復雜的業務邏輯會放到外面的Service layer

          2  Rich Domain Model (Data Mapper)

          它的特點是POJOTABLE STRUCTURE并不一一對應,建模天馬行空,完全取決于業務邏輯。domain objecttable之間的mapping,由Data Mapper完成,domain object不用管數據表是何等結構,甚至不用管Data Mapper怎么操作。

           

          1.識別某種業務行為的一個很確定的原則:

                 domain logic只應該和這一個domain object實例狀態(并非“持久”狀態)有關,而不應該和一批domain object的狀態有關.

          進一步的說:主要看logic是否只和這個object(注:指自身)的狀態有關,如果只和這個object(注:指自身)有關,就是domain logic;如果logic是和一批domain object(注:指同類型的實體)的狀態有關,就不是domain logic,而是business logic

           

          2.Domain Model Hibernate PO 的區別:

          領域模型的代碼實現需要用一組互相協作的類來完成,每一個或者一組類承擔這個領域模型的某個特征。而Hibernate的實體類只不過是其中的一組類,它承擔的職責就是保持領域模型的狀態的。

           

          3.基于Domain Model 分析與設計的方法規則:

          應該由領域模型來驅動你的軟件內在規則,由需求驅動你的軟件外在交互.

           

          最后,我想補充的是:根據目前的O/R Mapping技術,我們在實際項目開發中,能真正做到 富領域模型 還不現實(因為我們還要考慮諸如性能、目前O/R持久化特性等等問題),更何況,我們的MODEL DATA最終需要被持久化,因此,我比較反對在DOMAIN MODEL 中直接通過任何方式做任何持久化操作,因為這會讓你所設計的MODEL無法獨立化,難以單元測試,并且與加入了一些外界無關的東西,這不符合對象的本質(對象本身是不能持久化的)。雖然我們做不到完整意義上的Domain Driving Model Development,但我們可以在項目實際開發中因為性能、結構簡化等等上面得到補償,這已經值得欣慰了。

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

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

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

          常用鏈接

          留言簿

          隨筆分類(31)

          隨筆檔案(19)

          文章分類(3)

          文章檔案(3)

          我關注的Blogs

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 洛阳市| 正镶白旗| 沂源县| 东乌珠穆沁旗| 莒南县| 雅江县| 屯昌县| 探索| 改则县| 云南省| 兴文县| 甘孜县| 望奎县| 栖霞市| 南靖县| 海伦市| 陆良县| 太和县| 仪征市| 元江| 泰兴市| 涡阳县| 富锦市| 六盘水市| 宁夏| 上犹县| 洛隆县| 韶关市| 建平县| 修武县| 香河县| 侯马市| 永丰县| 长宁区| 南平市| 遵化市| 黄龙县| 黄冈市| 秀山| 广丰县| 通榆县|