領域驅動設計和貧血、失血、充血模型

事物腳本: 事務腳本的核心是過程,通過過程的調用來組織業務邏輯,每個過程處理來自表現層的單個請求。大部分業務應用都可以被看成一系列事務,從某種程度上來說,通過事務腳本處理業務,就像執行一條條Sql語句來實現數據庫信息的處理。事務腳本把業務邏輯組織成單個過程,在過程中直接調用數據庫,業務邏輯在服務(Service)層處理。

領域模型: 領域模型的特點也比較明顯, 屬於面向對象設計,領域模型具備自己的屬性行爲狀態,並與現實世界的業務對象相映射。各類具備明確的職責劃分,領域對象元素之間通過聚合和引用等關係配合解決實際業務應用和規則。可複用,可維護,易擴展,可以採用合適的設計模型進行詳細設計。缺點是相對複雜,要求設計人員有良好的抽象能力。

  • 失血模型:模型僅僅包含數據的定義和getter/setter方法,業務邏輯和應用邏輯都放到服務層中。這種類在java中叫POJO,在.NET中叫POCO。
  • 貧血模型:貧血模型中包含了一些業務邏輯,但不包含依賴持久層的業務邏輯。這部分依賴於持久層的業務邏輯將會放到服務層中。可以看出,貧血模型中的領域對象是不依賴於持久層的。
  • 充血模型:充血模型中包含了所有的業務邏輯,包括依賴於持久層的業務邏輯。所以,使用充血模型的領域層是依賴於持久層,簡單表示就是UI層->服務層->領域層<->持久層
  • 脹血模型:脹血模型就是把和業務邏輯不想關的其他應用邏輯(如授權、事務等)都放到領域模型中。我感覺脹血模型反而是另外一種的失血模型,因爲服務層消失了,領域層幹了服務層的事,到頭來還是什麼都沒變。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章