SlideShare a Scribd company logo
1 of 35
Download to read offline
Teddy Chen
teddy@teddysoft.tw
http://teddy-chen-tw.blogspot.tw/
Oct. 16 2021 @ DDD TW
16:30~17:20
Copyright@2021 Teddysoft
• 聽過DDD請舉手
• 實作過DDD請舉手
• 聽過DCI請舉手
• 實作過DCI請舉手
• 以上皆是請舉手
Copyright@2021 Teddysoft
Copyright@2021 Teddysoft
• 土豆
• 勉強
Copyright@2021 Teddysoft
1. 事 物 的 意 義 , 須 放 在 特 定
Context 之下討論才有意義
2. 相 同 概 念 ( 名 詞 ), 在 不 同
Context之下可能有不同意義
Copyright@2021 Teddysoft
Copyright© 2021 Teddysoft 《ezKanban》
Bounded Context裡面
有什麼?
Copyright@2021 Teddysoft
Copyright© 2021 Teddysoft 《Domain-Driven Design: Tackling Complexity in the Heart of Software》
Domain
Events
Ubiquitous
Language
Bounded
Context define model within
names enter
model gives structure to
express model with
Copyright@2021 Teddysoft 《ezKanban》
貧血好還是充血好?
Copyright@2021 Teddysoft
Copyright@2021 Teddysoft
Use Case是一種Context嗎?
Copyright@2021 Teddysoft
DDD有提到Use Case嗎?
Copyright@2021 Teddysoft
Copyright© 2021 Teddysoft 《Domain-Driven Design: Tackling Complexity in the Heart of Software》
Domain
Events
Ubiquitous
Language
Bounded
Context define model within
names enter
model gives structure to
express model with
Copyright© 2021 Teddysoft 《Clean Architecture》
• 商業邏輯要放在哪裡? Entity Layer 或 Use Case
Layer (Application Service Layer) ?
• Clean Architecture 說
– Entity Layer
• Critical Business Rules
– Use Case Layer
• Application-Specific Business Rules
• 怎麼區分商業邏輯是Critical或Application-Specific?
– It….depends! Orz
• 如何重複使用商業邏輯?
Copyright@2021 Teddysoft
Copyright© 2021 Teddysoft 《Domain-Driven Design: Tackling Complexity in the Heart of Software》
Domain
Events
Ubiquitous
Language
Bounded
Context define model within
names enter
model gives structure to
express model with
Copyright© 2021 Teddysoft
Copyright@2021 Teddysoft
請看瀏覽器
Copyright@2021 Teddysoft
• Data
– 資料類別,原本充血模型類別的演算法被抽離出來放到角色(Role)
– Role是沒有狀態的類別,類似domain service。但在DCI架構中,
Data可以在執行期間動態扮演不同角色
– Data扮演某個Role之後,該Data物件看起來就變成屬於該Role的型別,
可以執行該Role所定義的方法
• Context
– 物件的演算法必須放在一個特定情境(Context)去討論才可知道它
的意義,這個情境就是使用案例
• Interaction
– 使用案例藉由指派若干Data物件扮演不同Role,並控制物件之間的協
作來完成使用案例,稱為互動(Interaction)
Copyright@2021 Teddysoft 《The DCI Architecture by Trygve Reenskaug and James O. Coplien》
DCI為什麼主張在使用案例中
動態決定程式行為的意義? 為
什麼不是把程式行為綁定在
類別身上, 由類別決定?
Copyright@2021 Teddysoft
程式範例
Copyright@2021 Teddysoft
Copyright@2021 Teddysoft
Copyright@2021 Teddysoft
請看IntelliJ
• Step 1: 定義 TeamRoles => Content, Membership,
BoardAccess 與每一個角色需要使用的Data class
• Step 2: 實作 MembershipRole, BoardAccessRole
• Step 3: 重構 Team
– 實作TeamRoles.Content, MembershipRole, BoardAccessRole
– 使用 TeamRoles.TeamData
– 使用 MembershipRole, BoardAccessRole
• Step 4: 重構 Team使其支援角色扮演
– 讓Team繼承DciAggregateRoot
– 修改 use case 測試案例,使用 playRole 來執行程式
• Step 5: 新增角色BoardContentRole並將其動態加入Team
Copyright@2021 Teddysoft 請看IntelliJ
Copyright@2021 Teddysoft
Copyright@2021 Teddysoft
Copyright@2021 Teddysoft
Copyright@2021 Teddysoft
• 有感的好處
– 簡化Aggregate設計、實作與測試
• 真,單一責任
– 依據角色重新排版Event Storming
• 有疑惑的理論好處
– 已經透過Event Storming切割出Task-Based使用
案例(Command),在此情況下是否真的需要DCI
強調的動態扮演不同角色的彈性?
– Task-Based使用案例沒有很複雜的Interaction
Copyright@2021 Teddysoft
Copyright@2021 Teddysoft
Copyright@2021 Teddysoft
• 搞笑談軟工部落格
– http://teddy-chen-tw.blogspot.com
• 搞笑談軟工Facebook
– https://www.facebook.com/groups/teddy.tw
• 泰迪軟體官方網站
– http://teddysoft.tw
Copyright@ 2021 Teddysoft

More Related Content

More from teddysoft

從Bowling Game Kata看敏捷開發
從Bowling Game Kata看敏捷開發從Bowling Game Kata看敏捷開發
從Bowling Game Kata看敏捷開發teddysoft
 
當Scrum遇到Pattern
當Scrum遇到Pattern當Scrum遇到Pattern
當Scrum遇到Patternteddysoft
 
跟著Teddy讀Pattern
跟著Teddy讀Pattern跟著Teddy讀Pattern
跟著Teddy讀Patternteddysoft
 
洗白你的軟體架構
洗白你的軟體架構洗白你的軟體架構
洗白你的軟體架構teddysoft
 
如何學好設計模式
如何學好設計模式如何學好設計模式
如何學好設計模式teddysoft
 
了解模式讓你更敏捷 (C C Agile 活動分享)
了解模式讓你更敏捷 (C C Agile 活動分享)了解模式讓你更敏捷 (C C Agile 活動分享)
了解模式讓你更敏捷 (C C Agile 活動分享)teddysoft
 
從五個小故事看敏捷開發精神
從五個小故事看敏捷開發精神從五個小故事看敏捷開發精神
從五個小故事看敏捷開發精神teddysoft
 
軟體開發成功的秘訣
軟體開發成功的秘訣軟體開發成功的秘訣
軟體開發成功的秘訣teddysoft
 
[演講] Scrum導入經驗分享
[演講] Scrum導入經驗分享[演講] Scrum導入經驗分享
[演講] Scrum導入經驗分享teddysoft
 
那一夜我們說Pattern design patterns 20周年-published
那一夜我們說Pattern design patterns 20周年-published那一夜我們說Pattern design patterns 20周年-published
那一夜我們說Pattern design patterns 20周年-publishedteddysoft
 
好設計如何好 @ C.C. Agile #14
好設計如何好 @ C.C. Agile #14好設計如何好 @ C.C. Agile #14
好設計如何好 @ C.C. Agile #14teddysoft
 
[教材] 例外處理設計與重構實作班201309
[教材] 例外處理設計與重構實作班201309[教材] 例外處理設計與重構實作班201309
[教材] 例外處理設計與重構實作班201309teddysoft
 
Design Patterns這樣學就會了:入門班 Day1 教材
Design Patterns這樣學就會了:入門班 Day1 教材Design Patterns這樣學就會了:入門班 Day1 教材
Design Patterns這樣學就會了:入門班 Day1 教材teddysoft
 
搞懂Java例外處理的難題:Checked與Unchecked Exceptions不再是問題
搞懂Java例外處理的難題:Checked與Unchecked Exceptions不再是問題搞懂Java例外處理的難題:Checked與Unchecked Exceptions不再是問題
搞懂Java例外處理的難題:Checked與Unchecked Exceptions不再是問題teddysoft
 
Java 例外處理壞味道與重構技術
Java 例外處理壞味道與重構技術Java 例外處理壞味道與重構技術
Java 例外處理壞味道與重構技術teddysoft
 
模式入門第一堂課: 30分鐘寫出一個模式
模式入門第一堂課: 30分鐘寫出一個模式模式入門第一堂課: 30分鐘寫出一個模式
模式入門第一堂課: 30分鐘寫出一個模式teddysoft
 

More from teddysoft (16)

從Bowling Game Kata看敏捷開發
從Bowling Game Kata看敏捷開發從Bowling Game Kata看敏捷開發
從Bowling Game Kata看敏捷開發
 
當Scrum遇到Pattern
當Scrum遇到Pattern當Scrum遇到Pattern
當Scrum遇到Pattern
 
跟著Teddy讀Pattern
跟著Teddy讀Pattern跟著Teddy讀Pattern
跟著Teddy讀Pattern
 
洗白你的軟體架構
洗白你的軟體架構洗白你的軟體架構
洗白你的軟體架構
 
如何學好設計模式
如何學好設計模式如何學好設計模式
如何學好設計模式
 
了解模式讓你更敏捷 (C C Agile 活動分享)
了解模式讓你更敏捷 (C C Agile 活動分享)了解模式讓你更敏捷 (C C Agile 活動分享)
了解模式讓你更敏捷 (C C Agile 活動分享)
 
從五個小故事看敏捷開發精神
從五個小故事看敏捷開發精神從五個小故事看敏捷開發精神
從五個小故事看敏捷開發精神
 
軟體開發成功的秘訣
軟體開發成功的秘訣軟體開發成功的秘訣
軟體開發成功的秘訣
 
[演講] Scrum導入經驗分享
[演講] Scrum導入經驗分享[演講] Scrum導入經驗分享
[演講] Scrum導入經驗分享
 
那一夜我們說Pattern design patterns 20周年-published
那一夜我們說Pattern design patterns 20周年-published那一夜我們說Pattern design patterns 20周年-published
那一夜我們說Pattern design patterns 20周年-published
 
好設計如何好 @ C.C. Agile #14
好設計如何好 @ C.C. Agile #14好設計如何好 @ C.C. Agile #14
好設計如何好 @ C.C. Agile #14
 
[教材] 例外處理設計與重構實作班201309
[教材] 例外處理設計與重構實作班201309[教材] 例外處理設計與重構實作班201309
[教材] 例外處理設計與重構實作班201309
 
Design Patterns這樣學就會了:入門班 Day1 教材
Design Patterns這樣學就會了:入門班 Day1 教材Design Patterns這樣學就會了:入門班 Day1 教材
Design Patterns這樣學就會了:入門班 Day1 教材
 
搞懂Java例外處理的難題:Checked與Unchecked Exceptions不再是問題
搞懂Java例外處理的難題:Checked與Unchecked Exceptions不再是問題搞懂Java例外處理的難題:Checked與Unchecked Exceptions不再是問題
搞懂Java例外處理的難題:Checked與Unchecked Exceptions不再是問題
 
Java 例外處理壞味道與重構技術
Java 例外處理壞味道與重構技術Java 例外處理壞味道與重構技術
Java 例外處理壞味道與重構技術
 
模式入門第一堂課: 30分鐘寫出一個模式
模式入門第一堂課: 30分鐘寫出一個模式模式入門第一堂課: 30分鐘寫出一個模式
模式入門第一堂課: 30分鐘寫出一個模式
 

Dci vs aggregate_dddtw_2021-0.3-preview