Successfully reported this slideshow.
Your SlideShare is downloading. ×

DDD + Clean Architecture: 從需求到實作

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Upcoming SlideShare
漫談重構
漫談重構
Loading in …3
×

Check these out next

1 of 49 Ad

More Related Content

Slideshows for you (20)

Similar to DDD + Clean Architecture: 從需求到實作 (20)

Advertisement

More from teddysoft (19)

Advertisement

DDD + Clean Architecture: 從需求到實作

  1. 1. Teddy Chen teddy@teddysoft.tw http://teddy-chen-tw.blogspot.tw/ Sep. 03 2020 @ Asian PLoP 2020
  2. 2. Copyright@2020 Teddysoft
  3. 3. • 實作過OOAD請舉手 • 聽過DDD請舉手 • 實作過DDD請舉手 • 聽過Clean Architecture請舉手 • 實作過Clean Architecture請舉手 • 以上皆是請舉手 Copyright© 2020 Teddysoft
  4. 4. Copyright@2020 Teddysoft
  5. 5. Domain-Driven Design 何謂 Domain? Copyright© 2020 Teddysoft
  6. 6. • 應用程式邏輯所圍繞的知識和活動範圍 • 翻成白話文就是: – 在真實世界中,你的軟體所要解決的問題範圍 • 例如: – 電子商務、醫療系統、保險系統、銀行系統、叫 車系統、訂位系統等。 Copyright© 2020 Teddysoft
  7. 7. Domain-Driven Design 何謂 Driven? Copyright© 2020 Teddysoft
  8. 8. • Boss-Driven Design (BDD) • Use-Case Driven/ User Story Driven • Test-Driven Design (TDD) • Behavior-Driven Design (BDD) • Domain-Driven Design (DDD) Copyright© 2020 Teddysoft
  9. 9. Domain-Driven Design 何謂 Design? Copyright© 2020 Teddysoft
  10. 10. Copyright@2020 Teddysoft Context Form Context Form Or 設計就是決定Form與Context的邊界 (設計就是決定你要設計什麼)
  11. 11. Copyright@2020 Teddysoft Context Form force force force force force Forces 形塑 Form
  12. 12. • 開發軟體時專注於領域(domain)中的重要概念與 商業邏輯 (business logic),透過與領域專家 (domain expert)緊密溝通,共同建立領域模型 (domain model),再以此領域模行作為軟體實作 的基礎。 • 基本上與傳統物件導向分析與設計(OOAD)做法類 似,但實作細節不同。可視為一種OOAD的進階 版本,更適合當代分散式與反應式 (事件驅動) 的 系統開發 (Teddy個人看法) 。 Copyright© 2020 Teddysoft
  13. 13. Copyright@2020 Teddysoft
  14. 14. Copyright© 2020 Teddysoft • Model-Driven Design • Ubiquitous Language • Bounded Context • Aggregate 《Notes on the synthesis of form》
  15. 15. 覺得沒什麼特別的,沒有很大的動機讓自 己改變熟悉的OOAD開發方式 (因為沒有真的看懂+缺少應用Context) Copyright@2020 Teddysoft
  16. 16. Copyright© 2020 Teddysoft 《Clean Architecture》, 2017 CA三原則
  17. 17. 用DDD實作CA的Entities Layer,用CA 實作DDD的Layered Architecture Copyright@2020 Teddysoft 《Domain-Driven Design: Tackling Complexity in the Heart of Software》 《Clean Architecture》 Tactical Design
  18. 18. • 困難點: – Domain Expert VS Developer – 講師需同時具備領域專業與開發專業 – Ubiquitous Language in Code • How to verify? • 嘗試: – 2018: Monitoring System • 成立 ezKanban team (前身為ezScrum team) – 2019 and 2020: Kanban System Copyright© 2020 Teddysoft
  19. 19. ezKanban Copyright@2020 Teddysoft
  20. 20. Copyright© 2020 Teddysoft 2019 2020
  21. 21. 用迭代與增量的方式建立 Domain Events (ES) 與Domain Model Copyright@2020 Teddysoft Domain Model Domain Events (Event Storming)
  22. 22. Copyright@2020 Teddysoft 先有雞還是先有蛋? 《達摩祖師傳》
  23. 23. Copyright@2020 Teddysoft Ubiquitous Language (1/2) 1. Card 2. Work Item 3. User Story 4. Task 5. Ticket 6. Issue 哪個名字好?
  24. 24. Copyright@2020 Teddysoft Ubiquitous Language (2/2) 1. 垂直: Column, Stage, Step, Phase 2. 水平: Row, Lane, Swimlane 哪個名字好?
  25. 25. Copyright@2020 Teddysoft Domain Model 的表達力 (1/2) Source: https://leankit.com/ Domain model 如何表達複雜的看板?
  26. 26. Copyright@2020 Teddysoft Domain Model 的表達力 (2/2) 目前版本 各種嘗試版本
  27. 27. Copyright@2020 Teddysoft Domain Model with Aggregate
  28. 28. • 為什麼突然冒出TDD? – 自然湧現 Copyright© 2020 Teddysoft 《Clean Architecture》 2 1 3
  29. 29. Copyright© 2020 Teddysoft TDD: 每一個驗收測試都很像
  30. 30. Write a failing unit test Make the test pass Refactor Write a failing acceptance test for a use case 1 2 3 0 OOAD VS Teddy’s DDD Copyright@2020 Teddysoft Design Model Implementation Model After Implementation Code-First OOAD DDD+ES+CA+TDD Domain Model Use Case Model DDD Domain Model Event Storming Clean Architecture
  31. 31. Copyright© 2020 Teddysoft Task-Based UI CRUD-Based UI
  32. 32. Copyright© 2020 Teddysoft Event Storming不再只是CRUD為主的領域事件
  33. 33. Copyright© 2020 Teddysoft Command Query 所有Command共用一組 Output/Presenter 在Event Storming圖上面替 Query補上ViewModel (ReadModel) 與UI畫面
  34. 34. Copyright© 2020 Teddysoft 橋歸橋,路歸路 《CQRS》
  35. 35. Copyright© 2020 Teddysoft 把 “picture that explains everything” 弄得更清楚 Command Query (可以不套用DDD) 《Introducing EventStorming》
  36. 36. Copyright© 2020 Teddysoft • 兩種類型的domain events: – Bounded context之內 – 傳遞至bounded context之外 • 典型用途: – 狀態同步 • eventual consistency – Event sourcing
  37. 37. Copyright© 2020 Teddysoft Domain Event同步不同Aggregate的狀態
  38. 38. Copyright© 2020 Teddysoft 用Domain Event支援同時多人使用相 同看板的狀態同步
  39. 39. Copyright© 2020 Teddysoft 《Clean Architecture》 Entities與Use Cases 乾淨即可,第三層 Interface Adapter可 以直接與框架耦合
  40. 40. Copyright© 2020 Teddysoft 透過依賴反轉達到CA的相依性原則
  41. 41. Copyright© 2020 Teddysoft Interface Adapter之後就算了 XD Rest Controller直接與框架 (SpringBoot) 耦合
  42. 42. Copyright© 2020 Teddysoft Account Management Team Management Kanban Management Reporting Clean Architecture建議:好的架構應該支持「延遲佈署決策」
  43. 43. Copyright© 2020 Teddysoft 不需要為了趕流行硬套微服務
  44. 44. Copyright@2020 Teddysoft
  45. 45. • DDD – Aggregate狀態與domain event發送的一致性 – 決定Aggregate邊界。 – 跨越bounded-context的cross-cutting concerns, 例如認證與存取控制。 • Clean Architecture – Package by: Layer, Feature, Component? Copyright© 2020 Teddysoft
  46. 46. Copyright@2020 Teddysoft
  47. 47. Copyright@2020 Teddysoft 請看 Miro 與 IntelliJ
  48. 48. Copyright© 2020 Teddysoft ULIC搭配Clean Architecture, 可減低軟體開發的 認知負荷 (cognitive load),達到讓軟體 變軟的目的 • Miro很適合用來做event storming • UI雖是細節但卻是很重要的細節 • 不是所有系統或BC都需要DDD
  49. 49. • 搞笑談軟工部落格 – http://teddy-chen-tw.blogspot.com • 搞笑談軟工Facebook – https://www.facebook.com/groups/teddy.tw • 泰迪軟體官方網站 – http://teddysoft.tw Copyright@2020 Teddysoft

×