<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    狂人思維·成都
    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的激烈討論,讓我對DOMAIN MODEL的理解更深刻了不少,趁現(xiàn)在意猶未盡之際,結(jié)合我在項目中的實際經(jīng)驗將討論中的一些結(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一一對應(yīng),建模基于數(shù)據(jù)庫設(shè)計。Hibernate走的就是這個路子,說它貧血,意思就是指它只有data,沒有behavior(但我們實際可以通過HBM文件的定義和映射,在PO中適當(dāng)?shù)募尤胍恍┗镜臉I(yè)務(wù)邏輯的。)

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

    2  Rich Domain Model (Data Mapper)

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

     

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

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

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

     

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

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

     

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

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

     

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

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

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

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

    常用鏈接

    留言簿

    隨筆分類(31)

    隨筆檔案(19)

    文章分類(3)

    文章檔案(3)

    我關(guān)注的Blogs

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 天黑黑影院在线观看视频高清免费| 9420免费高清在线视频| 亚洲精品无码久久久影院相关影片 | 亚洲免费无码在线| 亚洲综合网美国十次| 国产高清在线免费| 久久国产免费观看精品3| 亚洲人成无码网站在线观看| 亚洲无线观看国产精品| 国产又黄又爽又猛免费app| 一个人免费播放在线视频看片| 亚洲欧洲日产v特级毛片| 亚洲国产精品成人网址天堂| 免费看又黄又无码的网站 | 免费A级毛片无码视频| 国产精品亚洲专区无码牛牛| 亚洲欧洲第一a在线观看| 免费播放特黄特色毛片| 色播精品免费小视频| h视频在线观看免费| 亚洲国产午夜精品理论片在线播放| 亚洲高清国产拍精品26U| 免费永久看黄在线观看app| 99久久精品国产免费| 一级毛片免费在线观看网站| 亚洲va在线va天堂成人| 亚洲av午夜福利精品一区| 免费又黄又硬又爽大片| 黄页网站在线看免费| 成人性生交大片免费看中文| 亚洲AV日韩AV无码污污网站| 亚洲国产夜色在线观看| 国产亚洲综合久久系列| 国产一区二区免费在线| 午夜免费福利影院| 国产成人精品久久免费动漫| 你懂的免费在线观看网站| g0g0人体全免费高清大胆视频| 亚洲第一综合天堂另类专| 激情五月亚洲色图| 亚洲一区无码中文字幕乱码|