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

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

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

    人在江湖

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      82 Posts :: 10 Stories :: 169 Comments :: 0 Trackbacks

    就好像第一次讀effective java才意識到什么叫做代碼質量;第一次接觸到Domain Driven Design才開始認識什么是design。在之前的博客, 分享十二本經典電子書,涉及java, OO design, spring, hibernate,struts2, agile 中,有DDD書的下載。

    Domain Driven Design基于一些簡單,重要,務實的理念。下面根據自己的理解總結DDD的基本理論。

    1. 深刻理解Domain知識

    DDD強調基于domain進行設計。前提是深刻理解領域知識,需要持續學習。另一個相關的實踐是,“統一的語言”(ubiquitous language)。領域專家所用的術語是準確的,那么程序員討論domain相關的問題時,也應該使用這種術語。并且在寫code的時候,也使用這種術語。這樣做的好處是,可以自然地把domain的東西map到code里,保持code反應domain。

     

    2. 分層

    Layered Architecture

    image

     

    程序需要分層,這是個簡單的道理, 但需要真正形成意識。

    分別說說Domain Driven Design涉及的四個layer.

    2.1 Infrastructure層

    主要從技術上對上面的各層提供支持。比如傳送消息,持久化。UI層也可以分出更基礎的component作為infrastructure層

    2.2 UI層

    UI層的作用是顯示信息以及解釋用戶的輸入命令。重要的是UI層沒有domain knowledge.

    2.3 application層

    application層的作用是描述產品的外部功能,它可以協調UI和Domain層的互動。application層應該很薄。它沒有domain knowledge.

    2.4 Domain層

    Domain層是最重要的層。封裝所有的業務邏輯。

     

    DDD也從另一個角度分解軟件。一個軟件的組成部分(building block)包括association, entity, value object, service, module。其中比較強調的是entity, value object和service. service比較容易理解,通常它是無狀態的。它可以存在于application層,domain層或者infrastructure層。比較不容易區分的是entity和value object. entity強調的是它的id,而不是屬性。強調它生命周期的繼續性和同一性(continuity and identity), 而value object是用來“描述”entity的。value object在很多時候適合是immutable的。這里需要注意的是,如果你會使用hibernate,你會知道hibernate里的value object通常不能reference多個entity,換句話說,能reference多個entity的,通常就是entity.  而在DDD的理論中,"路線"是一個value object。而它可以reference連接"路線"的city(entity)和高速公路(entity)。

     

    3. Domain Object生命周期

    DDD的一個重要理論是關于aggregate. domain object之間的關系如果非常復雜,在domain knowledge涉及比較復雜的rule的時候,容易造成不一致的情況。解決辦法是,把一些domain object放一個組里,讓某個domain object作為根(aggregate root), 所有對這些domain object的訪問都要通過這個aggregate, 那么維持一致性的工作,就限制在這個aggregate root里了。

    image

     

    另一個相關理論是factory和repository. factory是用來“創建”對象的,是一個從無到有的過程。而repository是用來retrieve對象的,也就是說,對象客觀存在,只是沒有放在內存中,repository就是把數據從某個地方(通常是數據庫)拿出來,construct成對象的。一個常見的設計是,讓repository暴露retrieve和create的api,但是create的具體工作代理給factory來做,也就是說,factory通常被聚合在repository中。

    posted on 2011-03-21 00:26 人在江湖 閱讀(3592) 評論(0)  編輯  收藏 所屬分類: design
    主站蜘蛛池模板: 无遮免费网站在线入口| 免费福利电影在线观看| 免费无码黄动漫在线观看| 国产成人精品日本亚洲专| 真人做人试看60分钟免费视频| 久久综合日韩亚洲精品色| 青青草原1769久久免费播放| 久久久久久a亚洲欧洲aⅴ| 日本免费电影一区二区| 亚洲高清视频在线观看| 欧洲精品99毛片免费高清观看| 亚洲一区免费观看| 亚洲高清免费在线观看| 亚洲一区二区三区高清在线观看| 成年人视频在线观看免费| 久久亚洲色WWW成人欧美| 亚洲国产成人精品91久久久| 香蕉免费在线视频| 久久青青成人亚洲精品| 67194熟妇在线永久免费观看| 亚洲精品伊人久久久久| 国产裸模视频免费区无码| 羞羞视频免费网站日本| 中文字幕久久亚洲一区| 亚洲精品视频在线观看免费| 亚洲人成未满十八禁网站| 亚洲AV无码乱码在线观看性色扶| 中文字幕无线码免费人妻| 337p日本欧洲亚洲大胆精品555588| 在线视频精品免费| 精品一区二区三区无码免费直播| 亚洲综合国产一区二区三区| 最近中文字幕免费2019| jzzijzzij在线观看亚洲熟妇| 亚洲自偷自偷在线制服| 亚洲免费视频播放| 国产成人精品亚洲| 久久精品国产亚洲av日韩| 国产麻豆剧传媒精品国产免费| 免费无码一区二区三区蜜桃 | 卡1卡2卡3卡4卡5免费视频|