主要將領域層從系統中隔離出來;這樣有利於集中修改,也有利於業務知識的傳遞和學習;php
layered architecture目前比較主流的分層模式:前端
-應用層 定義軟件要完成的任務,調用領域層來完成任務;但不要涉及具體的業務規則和知識;要儘可能簡單;java
領域層 表達業務概念,業務規則,業務狀態信息;是軟件的核心架構
基礎設施層 爲上面三層提供技術支持;如提供消息服務,持久化服務,通訊服務框架
如今大部分使用架構框架來時實現基礎設施層.侵入性較強dom
被認爲是反模型;用ui圖來表達業務邏輯.適合小項目,好比php的項目,但不適合複雜的業務系統.;學習
關聯:現實中的關聯很是多,然須要限制它,以減小建模複雜度;向業務方向限制;如將多對多降級爲一對多;ui
設計中的entity,service與java中的概念不一樣;設計
entity: 表示某種具備連續性和標誌的事物對象;某個事物的屬性可能發生變化,用標誌來區分事物.對象
value object :表示某種狀態屬性;這類事物原則上是不可變的,不須要標誌;能夠進行共享或複用
service:有些領域概念是動做或活動;當一個動做涉及幾個entity時,就須要將它單獨放在service中;中等粒度的service有時是區分領域最好的形式
module是更粗粒度的結構;模塊應該是高內聚,低耦合的;將一組有關聯的entity,vo,service聚合在一塊兒;在聚合中體現出領域驅動設計;體現出domain層;
目前面向對象的範式最流行;但包含大量數學與邏輯推理領域則不適用面向對象,它們自己就是面向過程. 設計範式不一樣於實現範式;
聚合,工廠,倉庫;aggregate,factory,repository
指定一個聚合根entity,在聚合範圍內,全部的操做都要經過聚合根實現,全部的固定規則都必須實現;實現一個小範圍內的閉環;
根,邊界,固定規則;
提供新建或複製entity是領域的功能;工廠方法或工廠服務,構造器建立三種;
工廠方法:抽象工廠模式,構造器模式,建立要知足固定規則;
repository主要負責持久化工做,與factory結合,完成對象的新增和重建;