iT邦幫忙

2024 iThome 鐵人賽

DAY 5
1
Software Development

DDD? Clean Architecture? Microservices? 帶你用.NET實作打造一個現代化微服務!系列 第 5 篇

Day 05 - DDD Strategic Design:To-Do List 系統需求分析與架構規劃

  • 分享至 

  • xImage
  •  

前言

前面已經介紹了一些理論,現在開始針對我們的主題——To-Do List 做一些分析。
先說好,實際進行 DDD 設計時並沒有這麼簡單,我會忽略許多設計元素,只講述我自己認為的重點。畢竟這裡的實戰只有我一個人,和一個簡單的 Domain。

戰略設計 (Strategic Design)

我想像中的 To-Do List 會有以下功能:

  1. 使用者可以任意創建帳號。
  2. 使用者需要能夠使用該帳號登入。
  3. 帳號創建成功後,會自動生成一個 Default 的 To-Do List。
  4. 每個使用者可以創建多個 To-Do Lists。
  5. 每個 To-Do List 可以包含多個 To-Do Items。
  6. 刪除 List 時,該 List 的 Items 也會一併刪除。
  7. Items 可以標記為完成或被刪除。

To-Do List 是產品的核心功能,其他的帳號管理只是輔助工具。因此,我們可以簡單將功能拆分為兩個 Domain:

  1. Todo Service —— 作為 Core Domain。
  2. User Service —— 作為 Support/Generic Domain。

功能分析

為了分析這些功能,我們可以簡單地使用不同顏色的便利貼來代表不同的意義:
Strategic Design 01

  • Actor —— 操作者
  • Aggregate —— 聚合物件
  • Command —— 指令
  • Event —— 事件
  • Policy —— Domain 的規範
  • System —— 關聯系統
  • Read Model —— 輸出資料

大致上,我們可以這樣子使用。
Strategic Design 02

這邊只展示了一些最基本的便利貼,其他還可以使用

  • Hot Spot —— 敘述中有任何有疑慮的地方,都可以用此來標記。
  • Opportunity —— 可能存在的商業機會。

接著,我們回到一開始描述的功能,並貼上相應的便利貼:

  1. 使用者可以任意創建帳號
    Strategic Design 03
  2. 使用者可以利用帳號登入
    Strategic Design 04
  3. 帳號創建成功後會自動生成 Default 的 To-Do List
    Strategic Design 05
  4. 使用者可以創建多個 To-Do Lists
    Strategic Design 06
  5. 每個 To-Do List 可包含多個 To-Do Items
    Strategic Design 07
  6. 刪除 List 後,其 Items 也會被刪除
    Strategic Design 08
  7. Items 可以完成或刪除
    Strategic Design 09

Overall

Strategic Design 10

總結

在這之後,我們把關鍵的 Command 和 Event 根據 Service 和 Aggregate 整理一下,去掉重複的物件,劃分相依性,最後寫上 Context Map。
Strategic Design 11
這樣,一個邊界圖就完成了。看到成果後,我自己都覺得這麼直觀的東西,幹嘛要寫得這麼複雜呢?不過,現實問題通常不會這麼直觀,這裡主要是希望讀者能夠理解 DDD 的戰略設計 如何一步步釐清產品需求中的所有細節,並規劃出合理的架構設計。

後續

接下來的篇章,將會分析與實作 Tactical Design,目標是設計出 Aggregate Model 和 Data Model。結束後就可以開始實作啦!


上一篇
Day 04 - Clean Architecture 與 DDD 的架構設計
下一篇
Day 06 - DDD Tactical Design:物件設計到資料庫格式
系列文
DDD? Clean Architecture? Microservices? 帶你用.NET實作打造一個現代化微服務! 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言