張逸的《領域驅動戰略設計實戰》地址,付費的,價格¥59,還能接受。git
領域驅動設計可能會給你帶來的收穫,下面幾點來自於原文,建議讀者閱讀原文:算法
領域驅動設計(Domain Driven Design,DDD)是Eric Evans提出的綜合軟件系統分析和設計的面向對象建模方法。它改變了傳統軟件開發工程師針對數據庫進行的建模方法,從而將要解決的業務概念和業務規則轉換爲軟件系統中的類型一級類型的屬性與行爲,經過合理運用面向對象的封裝、繼承和多態等設計要素。仔細想一想,咱們在開發項目時,是否是隻是思考數據庫的設計,圍繞着數據庫進行各類操做的呢!數據庫
領域驅動設計是一套方法論,它創建了以領域爲核心驅動力的設計體系,具備必定的開放性。領域驅動設計強調領域模型的重要性,並經過模型驅動設計來保障領域模型與程序設計的一致。因此必定要甄別出領域模型?架構
領域驅動設計貫穿了整個軟件開發的生命週期,包括對需求的分析、建模、架構、設計,甚至最終的編碼實現,乃至對編碼的測試與重構,真是這樣?微服務
領域驅動設計圍繞着領域模型進行設計,經過分層架構(Layered Architecture)將領域獨立出來。表示領域模型的對象包括:實體、值對象和領域服務,領域邏輯都應該封裝在這些對象中。領域邏輯都封裝在這些對象中?這是否是意味着富血模型。這樣嚴格的設計原則能夠避免業務邏輯滲透到領域層以外,致使技術實現與業務路基的混淆。測試
戰略設計會控制和分解戰術設計的邊界與粒度,戰術設計則以實證角度驗證領域模型的有效性、完整性、一致性,進而以演進的方式對以前的戰略設計階段進行迭代,從而造成一種螺旋式上升的迭代設計過程。編碼
面對客戶的業務需求,由領域專家與開發團隊展開充分的交流,通過需求分析與知識提煉,以得到清晰的問題域。難點在於需求分析、知識提煉。輔以分層架構與六邊形架構劃分系統的邏輯邊界與物理邊界,界定領域與技術之間的界限。以後進入戰術設計階段,深刻到限界上下文內對領域進行建模,並以領域模型指導程序設計與編碼實現。若在實現過程當中,發現領域模型存在重複、錯位或缺失時,再進而對已有模型進行重構,甚至從新劃分限界上下文。spa
經過對問題域進行分析和建模,識別限界上下文,利用它劃分相對獨立的領域,再經過上下文映射創建它們之間的關係,架構設計
學會對設計的本質思考,不要只限於設計概念的掌握,要追求對設計原則與方法的融匯貫通。設計
致使軟件複雜度的成因是規模、結構、變化三要素,要控制複雜度,就須要對他們進行各個擊破。
可進化性、可拓展性、可定製性。
可進化性:可劃分設計單元的邊界,肯定各個設計單元應該履行的職責以及須要與其餘設計單元協做的接口。因爲每一個單元有本身的邊界,邊界內的實現細節不會影響到外部的其它單元,因此,咱們很容易的替換單元內部的細節,保證他們的可進化性。
可拓展性:首先要識別軟件系統的變化點,常見的變化點包括業務規則、算法策略、外部服務、協議標準、數據格式、業務流程、系統配置等。處理這些變化點的核心就是"封裝",經過隱藏細節、引入間接等方式來隔離變化、下降耦合。
可定製型:感受可定製性與可拓展性有點相似。
有些地方,還不理解,更新中......