Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
Teddy Chen
teddy@teddysoft.tw
http://teddy-chen-tw.blogspot.tw/
Sep. 03 2020 @ Asian PLoP 2020
Copyright@2020 Teddysoft
• 實作過OOAD請舉手
• 聽過DDD請舉手
• 實作過DDD請舉手
• 聽過Clean Architecture請舉手
• 實作過Clean Architecture請舉手
• 以上皆是請舉手
Copyright© 2020 Teddyso...
Copyright@2020 Teddysoft
Domain-Driven Design
何謂 Domain?
Copyright© 2020 Teddysoft
• 應用程式邏輯所圍繞的知識和活動範圍
• 翻成白話文就是:
– 在真實世界中,你的軟體所要解決的問題範圍
• 例如:
– 電子商務、醫療系統、保險系統、銀行系統、叫
車系統、訂位系統等。
Copyright© 2020 Teddysoft
Domain-Driven Design
何謂 Driven?
Copyright© 2020 Teddysoft
• Boss-Driven Design (BDD)
• Use-Case Driven/ User Story Driven
• Test-Driven Design (TDD)
• Behavior-Driven Design (BDD)
...
Domain-Driven Design
何謂 Design?
Copyright© 2020 Teddysoft
Copyright@2020 Teddysoft
Context
Form
Context
Form
Or
設計就是決定Form與Context的邊界
(設計就是決定你要設計什麼)
Copyright@2020 Teddysoft
Context
Form
force
force
force
force
force
Forces 形塑 Form
• 開發軟體時專注於領域(domain)中的重要概念與
商業邏輯 (business logic),透過與領域專家
(domain expert)緊密溝通,共同建立領域模型
(domain model),再以此領域模行作為軟體實作
的基礎。
•...
Copyright@2020 Teddysoft
Copyright© 2020 Teddysoft
• Model-Driven Design
• Ubiquitous Language
• Bounded Context
• Aggregate
《Notes on the synthesi...
覺得沒什麼特別的,沒有很大的動機讓自
己改變熟悉的OOAD開發方式
(因為沒有真的看懂+缺少應用Context)
Copyright@2020 Teddysoft
Copyright© 2020 Teddysoft
《Clean Architecture》, 2017
CA三原則
用DDD實作CA的Entities Layer,用CA
實作DDD的Layered Architecture
Copyright@2020 Teddysoft
《Domain-Driven Design: Tackling Complexity...
• 困難點:
– Domain Expert VS Developer
– 講師需同時具備領域專業與開發專業
– Ubiquitous Language in Code
• How to verify?
• 嘗試:
– 2018: Monito...
ezKanban
Copyright@2020 Teddysoft
Copyright© 2020 Teddysoft
2019
2020
用迭代與增量的方式建立
Domain Events (ES) 與Domain Model
Copyright@2020 Teddysoft
Domain Model Domain Events
(Event Storming)
Copyright@2020 Teddysoft
先有雞還是先有蛋?
《達摩祖師傳》
Copyright@2020 Teddysoft
Ubiquitous Language (1/2)
1. Card
2. Work Item
3. User Story
4. Task
5. Ticket
6. Issue
哪個名字好?
Copyright@2020 Teddysoft
Ubiquitous Language (2/2)
1. 垂直: Column, Stage, Step, Phase
2. 水平: Row, Lane, Swimlane
哪個名字好?
Copyright@2020 Teddysoft
Domain Model 的表達力 (1/2)
Source: https://leankit.com/
Domain model 如何表達複雜的看板?
Copyright@2020 Teddysoft
Domain Model 的表達力 (2/2)
目前版本
各種嘗試版本
Copyright@2020 Teddysoft
Domain Model with Aggregate
• 為什麼突然冒出TDD?
– 自然湧現
Copyright© 2020 Teddysoft
《Clean Architecture》
2
1
3
Copyright© 2020 Teddysoft
TDD: 每一個驗收測試都很像
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...
Copyright© 2020 Teddysoft
Task-Based UI
CRUD-Based UI
Copyright© 2020 Teddysoft
Event Storming不再只是CRUD為主的領域事件
Copyright© 2020 Teddysoft
Command
Query
所有Command共用一組
Output/Presenter
在Event Storming圖上面替
Query補上ViewModel
(ReadModel) 與U...
Copyright© 2020 Teddysoft
橋歸橋,路歸路
《CQRS》
Copyright© 2020 Teddysoft
把 “picture that explains everything”
弄得更清楚
Command
Query (可以不套用DDD)
《Introducing EventStorming》
Copyright© 2020 Teddysoft
• 兩種類型的domain events:
– Bounded context之內
– 傳遞至bounded context之外
• 典型用途:
– 狀態同步
• eventual consi...
Copyright© 2020 Teddysoft
Domain Event同步不同Aggregate的狀態
Copyright© 2020 Teddysoft
用Domain Event支援同時多人使用相
同看板的狀態同步
Copyright© 2020 Teddysoft
《Clean Architecture》
Entities與Use Cases
乾淨即可,第三層
Interface Adapter可
以直接與框架耦合
Copyright© 2020 Teddysoft
透過依賴反轉達到CA的相依性原則
Copyright© 2020 Teddysoft
Interface Adapter之後就算了 XD
Rest Controller直接與框架 (SpringBoot) 耦合
Copyright© 2020 Teddysoft
Account
Management
Team
Management
Kanban
Management
Reporting
Clean Architecture建議:好的架構應該支持「延遲佈...
Copyright© 2020 Teddysoft
不需要為了趕流行硬套微服務
Copyright@2020 Teddysoft
• DDD
– Aggregate狀態與domain event發送的一致性
– 決定Aggregate邊界。
– 跨越bounded-context的cross-cutting
concerns, 例如認證與存取控制。
• Clean Arc...
Copyright@2020 Teddysoft
Copyright@2020 Teddysoft
請看 Miro 與 IntelliJ
Copyright© 2020 Teddysoft
ULIC搭配Clean Architecture,
可減低軟體開發的 認知負荷
(cognitive load),達到讓軟體
變軟的目的
• Miro很適合用來做event storming
...
• 搞笑談軟工部落格
– http://teddy-chen-tw.blogspot.com
• 搞笑談軟工Facebook
– https://www.facebook.com/groups/teddy.tw
• 泰迪軟體官方網站
– htt...
Vous avez terminé ce document.
Télécharger et lire hors ligne.
Prochain SlideShare
What to Upload to SlideShare
Suivant
Prochain SlideShare
What to Upload to SlideShare
Suivant
Télécharger pour lire hors ligne et voir en mode plein écran

9

Partager

DDD + Clean Architecture: 從需求到實作

Télécharger pour lire hors ligne

Domain Driven Design Taiwan 領域驅動設計年會 (DDDTW 2020) 演講投影片,介紹用DDD + Event Storming + Clean Architecture + TDD 開發看板系統

Livres associés

Gratuit avec un essai de 30 jours de Scribd

Tout voir

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
  • YiBinLi2

    Dec. 3, 2020
  • liweiyang5

    Nov. 30, 2020
  • SherlockChiang

    Nov. 30, 2020
  • SamChuang8

    Nov. 29, 2020
  • ssusera2a8a0

    Nov. 29, 2020
  • CalvinYeh

    Nov. 28, 2020
  • baibaitung

    Nov. 28, 2020
  • suxin92

    Nov. 27, 2020
  • mosica

    Nov. 27, 2020

Domain Driven Design Taiwan 領域驅動設計年會 (DDDTW 2020) 演講投影片,介紹用DDD + Event Storming + Clean Architecture + TDD 開發看板系統

Vues

Nombre de vues

5 348

Sur Slideshare

0

À partir des intégrations

0

Nombre d'intégrations

208

Actions

Téléchargements

96

Partages

0

Commentaires

0

Mentions J'aime

9

×