<mark id="5z1b5"><cite id="5z1b5"></cite></mark>

        <video id="5z1b5"></video>
          <noframes id="5z1b5"><ins id="5z1b5"></ins>

            <em id="5z1b5"></em>

            <dl id="5z1b5"><ins id="5z1b5"></ins></dl>

              領域驅動設計(DDD:Domain-Driven Design)

                Eric Evans的“Domain-Driven Design領域驅動設計”簡稱DDD,Evans DDD是一套綜合軟件系統分析和設計的面向對象建模方法,本站Jdon.com是國內公開最早討論DDD網站之一,可訂閱DDD專題。初學者學習DDD可從研究本站Jdon框架的DDD應用源碼開始,戳這里開始

                過去系統分析和系統設計都是分離的,正如我們國家“系統分析師” 和“系統設計師” 兩種職稱考試一樣,這樣割裂的結果導致,需求分析的結果無法直接進行設計編程,而能夠進行編程運行的代碼卻扭曲需求,導致客戶運行軟件后才發現很多功能不是自己想要的,而且軟件不能快速跟隨需求變化。

                DDD則打破了這種隔閡,提出了領域模型概念,統一了分析和設計編程,使得軟件能夠更靈活快速跟隨需求變化。見下面DDD與傳統CRUD或過程腳本或者面向數據表等在開發效率上比較:

              ddd

                服務器后端發展三個階段:

              1. UI+DataBase的兩層架構,這種面向數據庫的架構(上圖table module )沒有靈活性。
              2. UI+Service+DataBase的多層SOA架構,這種服務+表模型的架構易使服務變得囊腫,難于維護拓展,伸縮性能差,見這里討論Spring Web 應用的最大敗筆.
              3. DDD+SOA微服務的事件驅動的CQRS讀寫分離架構,應付復雜業務邏輯,以聚合模型替代數據表模型,以并發的事件驅動替代串聯的消息驅動。真正實現以業務實體為核心的靈活拓展。

                DDD革命性在于:領域模型準確反映了業務語言,而傳統J2EE或Spring+Hibernate等事務性編程模型只關心數據,這些數據對象除了簡單setter/getter方法外,沒有任何業務方法,被比喻成失血模型,那么領域模型這種帶有業務方法的充血模型到底好在哪里?

                以比賽Match為案例,比賽有“開始”和“結束”等業務行為,但是傳統經典的方式是將“開始”和“結束”行為放在比賽的服務Service中,而不是放在比賽對象本身之中。我們不能因為用了計算機,用了數據庫,用了框架,業務模型反而被技術框架給綁架,就像人雖然是由母親生的,但是人的吃喝拉撒母親不能替代,更不能以母愛名義肢解人的正常職責行為,如果是這樣,這個人就是被母愛綁架了。

                提倡充血模型,實際就是讓過去被肢解被黑crack的業務模型回歸正常,當然這也會被一些先入為主或被洗過腦的程序員看成反而不正常,這更是極大可悲之處。看到領域模型代碼,就看到業務需求,沒有翻譯沒有轉換,保證軟件真正實現“拷貝不走樣”。

                DDD最大的好處是:接觸到需求第一步就是考慮領域模型,而不是將其切割成數據和行為,然后數據用數據庫實現,行為使用服務實現,最后造成需求的首肢分離。DDD讓你首先考慮的是業務語言,而不是數據。重點不同導致編程世界觀不同。

                DDD是解決復雜中大型軟件的一套行之有效方式,在國外已經成為主流。DDD認為很多原因造成軟件的復雜性,我們不可能避免這些復雜性,能做的是對復雜的問題進行控制。而一個好的領域模型是控制復雜問題的關鍵。領域模型的價值在于提供一種通用的語言,使得領域專家和軟件技術人員聯系在一起,溝通無歧義。

                DDD在軟件生產流程中定位如下圖,DDD落地實現離不開in-memory緩存CQRS、 DCIEDAEvent Source幾大大相關領域。

              cache

               

              重點資訊

                2012年Eric Evans關于技術如何影響DDD的會話

                領域驅動設計參考

                領域驅動設計簡介 PDF

                聚合與一致性和有界上下文

                采訪DDD事件風暴發明者Alberto Brandolini

                DDD培訓與咨詢

               

              教程與文章

              板橋大話DDD
              用大白話簡單談談DDD的一些基礎特點,只是掃盲!數據庫SQL強人慎入

              鮑勃大叔實錘:類與數據結構的比較!每個優秀的軟件設計師和架構師都需要牢記的問題

              切實有效的三個步驟:如何通過劃分有界上下文設計微服務? - Robert Reppel

              面向對象建模與數據庫建模兩種分析設計方法的比較
              數據庫驅動設計與對象建模是決定軟件不同命運的兩大派別,誰可以讓軟件更具有生命,維護拓展更方便?伸縮性更強?

              對象和關系數據庫的天然阻抗
              軟件是講究方法的,要談方法,這個世界只有兩種:一是將復雜問題簡單化的方法;另一是將簡單問題復雜化的方法。對于軟件這個領域,你只能選擇前者。

              面向對象與領域建模
              據調查,目前有70%左右程序員是在使用OO語言編寫傳統過程化軟件,缺乏完整的面向對象思維方法的教育和培訓是基本根源,本文對軟件開發中幾個常見問題提出了獨立的見解及尖銳的觀點

              Evans DDD 領域建模
              如何提煉模型,而不是數據表,進而精化模型對象,使其能夠反映領域概念基本本質是一個復雜過程,Evans DDD是2004年提出的具備革命性影響的軟件思想。

              實戰DDD(Evans DDD:Domain-Driven Design領域驅動設計)
              領域建模是一種藝術的技術,不是數學的技術,它是用來解決復雜軟件快速應付變化的解決之道。

              領域模型驅動設計(Evans DDD)之模型提煉

              軟件建模設計

              如何從職 責和協作中發現豐富的充血對象?
              失血模型貧血模型是DDD最大敵人,如何根據SOLID原則GRASP原則設計業務行為?本文給出了DDD具體實踐中一些具體細節,是和DDD配合一起進行面向對象分析設計的好方法。

              業務模型統一描述
              統一語言是DDD一個重要特征和重點。

              DCI架構是什么?
              DCI架構:DCI: 對象的Data數據, 對象使用的Context場景, 對象的Interaction交互行為

              Domain Events異步應用
              領域驅動設計和異步架構完美實戰解決之道。

              DDD DCI和領域事件
              將DDD DCI Event sourcing結合在一個案例中,展示OOA和OOD實現過程,直至可運行的源代碼。

              業務建模:CQRS應用場景 
              如何更好地在實踐中實現DDD,又防止技術架構對業務領域的侵害,本文討論引入CQRS使用場景。

              DSM:Domain-Specific Modeling
              DSM是超越UML/MDA一種新的建模方法,它成倍提高軟件開發效率。

              四色原型
              我們在一個軟件革命的開始,它象90年代我們看到的面向對象編程從傳統過程語言中抽象出來一樣。 如果說GOF設計模式開辟了OO對象設計新時代,那么原型模式和MDA將開辟后十年的軟件新時代。更多四色專題

              Feature-Driven Development特征驅動開發
              使用JdonFramework等現代Model/Service框架是在什么項目工程背景下進行的?不是以前的XP(Extreme Programming )或RUP,而是FDD。

              UML和Java的阻抗
              如果Java和UML這種發展概念不匹配下去,我們真的要問UML過時了嗎?

              狀態對象:數據庫的替代者
              這是一個實戰中非常重要但是容易被忽視的概念,說它重要,是因為它比數據庫重要;說它容易被忽視也是同樣的原因,它經常被數據庫概念替代。

              不變性immutablity設計
              不變性是統領業務分析和高性能架構重要法門,通過業務上不變性分析設計,可以實現代碼運行的并發高性能和高擴展性  

              領域模型的隔離

              行為驅動開發(BDD)如何與領域驅動設計(DDD)結合?
              BDD認為是在不斷敏捷迭代開發中從用戶故事中挖掘領域模型,這種敏捷開發方式是否與DDD矛盾呢?

              事件、契約設計與BDD
              板橋banq提出中西結合的統一語言:場景 事件和狀態,該文進行了論證。

              DDD CQRS和Event Sourcing的案例:足球比賽
              DDD + CQRS + Event Sourcing實現案例,結合代碼與理論講解。

              集裝箱車隊系統的DDD案例
              為上海某大型港口公司的運輸系統實施的一個領域驅動設計DDD的實戰咨詢案例。

              DDD倉儲實現:Spring Data JDBC教程

              不使用DDD的后果:為什么我們停止了向微服務的遷移?

              DDD案例完整實現:本站開源Jivejdon 文檔按這里

              DDD培訓與咨詢

               

              相關參考

              領域驅動設計之我見

              領域驅動設計之實踐與反思

              #DDD有界上下文???#DDD聚合

              #DDD實體 #DDD值對象 #DDD服務

              #DDD倉儲Repository模式

              #DDD Specification規格模式

              #領域事件、事件風暴與事件溯源

              #CQRS架構 #職責驅動設計 #業務分析設計

              #DDD領域驅動設計 有關領域建模經驗探討...

              美女漫画大全