淺談 Domain Driven Design

3c38e1be8943ed7dba44f9206dd7048a?s=47 James Wang
June 14, 2020

淺談 Domain Driven Design

淺談 Domain Driven Design。從 DDD 戰略層面開始,然後簡介 Event Storming 工作坊流程與用途,包含看見領域全貌、設計商業流程與價值,最後抵達軟體建模整個過程。
影片連結:https://youtu.be/nWOtKptX1Z0

3c38e1be8943ed7dba44f9206dd7048a?s=128

James Wang

June 14, 2020
Tweet

Transcript

  1. James Wang 2020 / 6 / 14 Agile Hsinchu 淺談

    Domain Driven Design
  2. I’m James • 公司內擔任 Programmer。 • 於 AgileCommunity.tw 與 Domain

    Driven Design Taiwan 擔任社群志工。 • 偶爾出沒感興趣主題的社群。 • 曾於 Agile Tour Taipei 和 Agile 新竹/高雄社群分享。 DDD Taiwan (FB) AgileCommunity.tw (FB)
  3. 大家聽過 Domain Driven Design 嗎?

  4. 可能是從微服務相關書籍看到 DDD。 或者學習系統架構時認識 DDD。 又或者系統開發中有加入 Domain 相關設計。

  5. 以上是 DDD,但不是完整的 DDD。

  6. 我們先來看見 DDD 的全貌

  7. None
  8. DDD 戰略

  9. DDD 戰術

  10. 進入 DDD 要學的項目滿多的

  11. 還要把學會項目串接起來!

  12. 希望能用今天短短時間讓大家看到 DDD 入門的門。

  13. What’s Domain Driven Design?

  14. What's Domain Driven Design 簡介 我們看看提出 DDD 概念的 Eric Evans

    的解釋: Tackling Complexity in the Heart of Software. 【軟體核心複雜度的解決方案】
  15. Domain Driven Design 價值 DDD 其重要價值就是有系統地解構複雜的問題: The critical complexity of

    many software projects is in understanding the domain itself. 【軟體開發過程,最為關鍵複雜根本的原因是目標領域本身就錯綜複 雜】
  16. Domain Driven Design 解決領域複雜的作法 我們該如何面對複雜的領域?如何控制複雜呢? Creative collaboration of software experts

    and domain experts. 【讓系統開發專家與領域專家協同合作】
  17. Domain Driven Design 如何與領域專家協作 團隊 / 利害關係人透過工作坊形式與領域專家訪談: 1. EventStorming(事件風暴) 2.

    Domain Storytelling(領域敘事) 我知道的 他知道的 他知道的 他知道的 透過工作坊,認識領域知識。
  18. ENTER EVENTSTORMING

  19. 先看看 EVENTSTORMING 樣貌 商業流程視覺化,找出核心價值、風險與機會。

  20. EVENTSTORMING 環境準備

  21. EVENT STORMING 參與人員 引導師 FACILITATOR 領域專家(們) DOMAIN EXPERT(S) 利害關係人 STAKEHOLDERS

  22. EVENTSTORMING 三階段

  23. PIG PICTURE EVENTSTORMING 目的 a large scale workshop where software

    and business practitioners are building together a behavioral model of a whole business line. 【聚集具有不同背景關係人(Business and technical stakeholders),並且每個人提供瞭解的部分領域知識,共同 建構整個業務架構。】
  24. Start PIG PICTURE EVENTSTORMING have them model the entire business

    flow with Domain Events on a timeline.
  25. PIG PICTURE – Step 1 Chaotic Exploration(混沌探索)

  26. PIG PICTURE – Step 1 Chaotic Exploration(混沌探索)

  27. PIG PICTURE – Step 2 Enforce the Timeline(執行時間) Pivotal Event:關鍵事件,代表不同業務場景階段之間的轉換

  28. PIG PICTURE – Step 2 Enforce the Timeline(執行時間) Swimlanes:平行的業務流程

  29. PIG PICTURE – Step 2 Enforce the Timeline(執行時間)

  30. 衝突 在討論過程中,若有衝突發生且無法解決,建議使用紅色便 利貼視覺化衝突內容。包括不清楚、不確定、有爭議的事物。

  31. PIG PICTURE – Step 3 People & Systems

  32. PIG PICTURE – Step 4 Explicit Walkthrough(明確演練)

  33. 以上步驟完成 BIG PICTURE 看見業 務流程全貌。

  34. 我們知道業務流程中會發生什麼事 件,但還是不夠。

  35. 我們應該要再思考我們能提供怎麼 差異化的價值來滿足顧客。

  36. 我們應該針對現有業務問題設計解 決方案。

  37. 接下來進入 Process Modeling 階段

  38. PROCESS MODELING EVENTSTORMING 情境思考 小明於電商平台選了幾本書準備下單(總計金額 789 元)時, 發現限時特惠,買書滿 1000 元回饋

    200 元禮券,每組帳號回 饋上限 400 元。 結果最後又加了幾本書,最後下單總金額 2012 元整,得到 了兩張 200 元的折扣券。
  39. 小明選好商品並已完成下單作業 小明 將選擇商品結帳 已結帳 為事件加上使用者(User / Actor)與完成事件所需行為(Command)

  40. 觸發小明買更多更多的商品 使用者(USER / ACTOR)看到(READ MODEL)什麼觸發更多事件 小明 將選擇 商品結帳 已結帳 滿千送

    200 折扣抵用券
  41. 觸發小明買更多更多的商品 針對 READ MODEL,請 UI 和 UX 人員設計,產出 Prototype(UI) 小明

    將選擇 商品結帳 已結帳 滿千送 200 折扣抵用券
  42. 觸發小明買更多更多的商品 小明 將選擇 商品結帳 已結帳 滿千送 200 折扣抵用券 每組帳號 最多兩張

  43. PROCESS MODELING EVENTSTORMING

  44. EVENTSTORMING 書中 Pizza 範例

  45. PROCESS MODELING EVENTSTORMING 重點 • 瞭解公司戰略目標(Goals)與限制 • 依據目標設計商業流程策略 • 過程中可使用

    User Story 和實際案例(Examples)討論
  46. PROCESS MODELING EVENTSTORMING 重點 • 這過程沒有想像中簡單

  47. PROCESS MODELING EVENTSTORMING 重點 • 這過程沒有想像中簡單

  48. PROCESS MODELING EVENTSTORMING 重點 • 這過程沒有想像中簡單

  49. PROCESS MODELING EVENTSTORMING 成品展示

  50. 進入 Software Design 階段

  51. Aggregate 將概念相近的地方收攏放在一起

  52. Bounded Context 再次將概念收攏,找出軟體的邊界。

  53. Context Map Bounded Context 間的關聯性。

  54. 到此,使用 EVENTSTORMING 完成 DDD 戰略部分

  55. EVENTSTORMING 可以和大家常聽到 的 Impact Mapping 或 User Story Mapping 結合使用。

  56. EVENTSTORMING 也可以和 UX 常用 手法結合,譬如 Persona 或 Service Blueprinting 或

    User Journey Mapping。
  57. DDD 戰略

  58. 再深入解釋 DDD 重要的兩個概念

  59. Bounded Context(BC) DDD 核心最重要概念之一。 DDD deals with large models by

    dividing them into different Bounded Contexts and being explicit about their interrelationships.
  60. 透過 Bounded Context Canvas 切分 Bounded Context

  61. 團隊與領域專家合作優點 • 一同瞭解複雜的領域全貌。 • 將複雜領域拆分成較小且易於解決的 Bounded Context。 • 建立團隊 Ubiquitous

    Language。 A language structured around the domain model and used by all team members to connect all the activities of the team with the software. 【一種圍繞領域模型構造的語言,所有團隊成員都使用該語言, 將團隊所有活動與系統聯繫起來。】 ... within a bounded context. 【...在限界上下文的範圍內。 】
  62. Ubiquitous Language(UL) DDD 核心最重要概念之一。 在臺灣,代表 OK 沒有問題的意思。 在巴西,這是很粗魯的手勢。 Bounded Context

    Ubiquitous Language
  63. Ubiquitous Language(UL) DDD 核心最重要概念之一。

  64. DDD 戰略流程 Complexity Domain UL Bounded Context UL Bounded Context

    UL Bounded Context U U D D Stakeholders Domain Experts Event Storming Domain Storytelling
  65. 戰略到一段落。接下來,進入建模與 開發階段。

  66. How to map it in code?

  67. 建模

  68. © 2020, Domain Driven Design Taiwan Community Aggregate Canvas Overview

    Concern TODO Concern Scenario Name • Item1 • Item2 • Item3 Domain Service Command Command Command Command Domain Service Application Service Application Service Use Case Use Case Use Case Use Case Use Case Use Case <Invariant conditions> Scenario Scenario Scenario DDDDD: Aggregate Canvas: A fluent way to walk through Strategical modeling to tactical design
  69. 接下來進入開發階段,建議採用 BDD 與 TDD(尤其是重要的 Domain Model)。

  70. 今天簡單說了 Domain Driven Design 戰略部分 戰略 Strategic 戰術 Tactical •

    Bounded Context • Context Map • 系統開發相關 備註:戰略到戰術是持續迭代持續改進的流程。 建模 (聚合畫布)
  71. 總結 DDD 是軟體核心複雜度的解決方案。當你面對複雜的領域時, 可以使用 DDD 建置乾淨又貼合業務領域的系統。 當你使用 DDD 後,會發現寫出來的系統自然以領域知識劃分, 寫出接近於微服務架構系統。

    DDD 可以融合 UX / Agile / DevOps / XP …… 等概念,也能與 User Story Mapping …… 等方法結合。
  72. Understand Client Needs Build Software Write Code Solve Problems

  73. Ubiquitous Language UL UL UL U D D Bounded Context

    Bounded Context Bounded Context Stackholders Domain Experts Feedback Refactoring Coding Red Green Refactoring Modeling U Potentially Shippable Product Increment Merge the people, split the software.
  74. 更多學習資源 歡迎加入 Domain Driven Design Taiwan 社群。 連結:https://tinyurl.com/ychs4x3w

  75. 更多學習資源 領域驅動設計 領域驅動設計精粹 實現領域驅動設計 EVENTSTORMING 社群高手整理的 DDD 學習路徑與資源分享 DDD 書籍推薦

    這份鐵人賽 30 天文章 非常推薦新手入門學習。
  76. DDD 社群近期活動 • 如果想要深入瞭解 DDD 在小型 專案或導入相關議題嗎? • 如果想要知道 DDD

    與微服務之 間的關連嗎? • 如果想要探索 DDD 戰術開發常 被人遺忘卻很有用的技巧嗎? DDD TW 於 6/27(六) 下午線上三場 講座,一次滿足大家三個願望。 https://tinyurl.com/y7cj725c