貧血模型和DDD模型

貧血模型和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 模型的分裂(針對大型複雜系統)

  • 領域

    --例如電子商務系統

  • 子領域

    -- 一個領域在邏輯思惟分離的部分

    -- 例如訂單、產品目錄、庫存、發票

  • 界限上下文

    -- 領域模型所生產的邊界

     

    1597722394972.png

相關文章
相關標籤/搜索