貧血模型和DDD模型
1.貧血模型
1.1 概念
常見的mvc三層架構數據庫
-
簡單、沒有行爲設計模式
2.領域驅動設計
2.1 概念(2004年提出的)
-
Domain Driven Design網絡
-
簡稱 DDD架構
-
DDD是一種以領域爲核心的設計和開發理念。DDD經過維護一個深度反應領域概念的模型,以及提供了可行的通過實踐校驗的大量模式來應對領域的複雜性mvc
2.2 領域模型的特色
-
對業務領域作了建模函數
-- 細粒度的類,易於擴展,容易複用spa
-- 能夠應對複雜的業務邏輯設計
-- 須要經驗掌握對象
-
簡單的領域模型繼承
-- 幾乎和數據庫中的表一一對應
-
複雜領域模型
-- 使用了繼承、組合、設計模式等各類手段
2.3 什麼是領域
-
收入確認
-
機票預訂
-
金融
。。。
2.4 通用語言
UML圖、建模
2.5 DDD分層架構
-
用戶界面/展示層
-
應用層
-
領域層
-
基礎設施層
領域層就是把應用層的邏輯放到它這裏
2.6 在領域層有什麼東西
2.6.1實體
-
惟一標誌
--對象不是由屬性定義的,而是標誌定義的
-- 對象內容的變化不會影響標識符
-- 不管保存到硬盤 ,裝入內存,經過網絡發送,標識符都不變
-
除了標誌外,哪些東西應該成爲實體的屬性?
-- 抓住實體對象定義的最基本特徵,用於識別,查找或匹配對象的特徵
-- 只添加那些對概念相當重要的行爲和這些行爲所需的屬性
2.6.2 值對象(value Object)
-- 對象是根據值來肯定的
-- 能夠在不一樣的實體中使用
-- 值對象一般是不可變的
-- Color, Point ,Money...
2.6.3 領域服務
-
有些領域邏輯是動詞
-- 表示了一種重要的行爲很難映射爲對象,沒法概括到實體和 值對象當中
-- 例如:轉帳
-
特徵
-- 服務執行的操做涉及一個領域概念,這個領域概念一般不屬於一個實體或者值對象
-- 被執行的操做涉及到領域中的其餘的對象
-- 操做是無狀態的
-
聚合(高內聚,低耦合就是這個意思)
一堆對象組合有邊界的服務
2.6.4 當構造一個複雜的對象時...
-
怎麼解決這些問題?
-- 聚合的對象比較多
-- 構造函數參數不少
-- 邏輯很複雜
2.7 模型的分裂(針對大型複雜系統)
-
領域
--例如電子商務系統
-
子領域
-- 一個領域在邏輯思惟分離的部分
-- 例如訂單、產品目錄、庫存、發票
-
界限上下文
-- 領域模型所生產的邊界