SlideShare a Scribd company logo
1 of 38
Download to read offline
Teddy Chen
teddy@teddysoft.tw
http://teddy-chen-tw.blogspot.tw/
Oct. 16 2021 @ DDD TW
• 聽過DDD請舉手
• 實作過DDD請舉手
• 聽過DCI請舉手
• 實作過DCI請舉手
• 以上皆是請舉手
• 土豆
• 勉強
• OK
1. 事 物 的 意 義 , 須 放 在 特 定
Context 之下討論才有意義
2. 相 同 概 念 ( 名 詞 ), 在 不 同
Context之下可能有不同意義
《ezKanban》
Bounded Context裡面有什麼?
《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
《ezKanban》
貧血好還是充血好?
傳統物件導向觀點認為
充血模型比貧血模型好
DDD的領域模型是
貧血還是充血模型?
• Context決定意義
• 常見的DDD Context有:
–Bounded Context
–Domain Model裡面的類別→相當於Clean
Architecture的Entities Layer
• DDD的Domain Model通常屬於充血模型
Use Case是一種Context嗎?
DDD有提到Use Case嗎?
《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
《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
• 如何重複使用商業邏輯?
《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
請看瀏覽器
• 在DDD中,Bounded Context內的系統行為(商業邏
輯) 分散在不同階層的不同物件身上
• Aggregate Root的public method相當於一個小型的
使用案例 (task-based use case)
• 因此, Aggregate Root相當於一組task-based use
cases的集合, 可能導致:
–程式碼太多?
–違反單一責任原則?
• Data
– 資料類別,原本充血模型類別的演算法被抽離出來放到角色(Role) 。
– Role是沒有狀態的類別,類似domain service。但在DCI架構中,Data可以在執行期間動
態扮演不同角色。
– Data扮演某個Role之後,該Data物件看起來就變成屬於該Role的型別,可以執行該Role所
定義的方法。
• Context
– 物件的演算法必須放在一個特定情境(Context)去討論才可知道它的意義,這個情境就是
使用案例。
• Interaction
– 使用案例藉由指派若干Data物件扮演不同Role,並控制物件之間的協作來完成使用案例,
稱為互動(Interaction)。
《The DCI Architecture by Trygve Reenskaug and James O. Coplien》
DCI為什麼主張在使用案例中動
態決定程式行為的意義? 為什麼
不是把程式行為綁定在類別身上,
由類別決定?
程式範例 (下頁)
請看IntelliJ
• Step 1: 定義 TeamRoles
– Content, Membership, BoardAccess 與其所使用的Data class
• Step 2: 實作 MembershipRole, BoardAccessRole
• Step 3: 重構 Team
– 實作 TeamRoles.Content, MembershipRole, BoardAccessRole 介面
– 使用 TeamRoles.TeamData
– 使用 MembershipRole, BoardAccessRole instances
• Step 4: 重構 Team 支援角色扮演
– 讓Team繼承DciAggregateRoot
– 修改 use case 測試案例,使用 playRole 來執行程式
• Step 5: 新增角色BoardContentRole並將其動態加入Team
請看IntelliJ
• 充血模型是富人的貧血模型
• 貧血模型是富人的充血模型
< http://teddy-chen-tw.blogspot.com/2021/09/22.html >
• 有感的好處
– 簡化Aggregate設計、實作與測試
• 真,單一責任
– 依據角色重新排版Event Storming
• 有疑惑的理論好處
– 已經透過Event Storming切割出Task-Based使用案例
(Command),在此情況下是否真的需要DCI強調的動態扮
演不同角色的彈性?
– 透過Domain Event達到跨Aggregate的狀態最終一致性,
因此Task-Based使用案裡面並沒有很複雜的Interaction
• 後續探討議題
–DCI動態指派角色的特性是否與Aggregate Root定義衝突?
• Business operations, stage machines, transaction
boundaries, aggregate invariants, return immutable entities
to its callers
• Event sourcing
–不同程式語言實作方法與效能問題
–Business Rules 放在Entities Layer or Use Case Layers?
(下一頁)
• Context決定意義
• DDD中的「靜態」Contexts
– Bounded Context
– Domain Model: Entity, Value Object, Aggregate, Service
• DCI藉由在Context (使用案例) 中動態指派角色給資料類別
達到提升程式可讀性與重複使用性的目的
• 程式範例
– https://gitlab.com/TeddyChen/dci-demo
• 搞笑談軟工Facebook
– https://www.facebook.com/groups/teddy.tw
• 搞笑談軟工部落格
– http://teddy-chen-tw.blogspot.com
• 泰迪軟體官方網站
– http://teddysoft.tw

More Related Content

What's hot

微服務架構 導入經驗分享 吳剛志 - Community Open Camp
微服務架構 導入經驗分享 吳剛志 - Community Open Camp微服務架構 導入經驗分享 吳剛志 - Community Open Camp
微服務架構 導入經驗分享 吳剛志 - Community Open CampAndrew Wu
 
Humble Object Patternな話
Humble Object Patternな話Humble Object Patternな話
Humble Object Patternな話Hiroto Imoto
 
Scrum and xp from the trenches (1st edition, Chinese)
Scrum and xp from the trenches   (1st edition, Chinese)Scrum and xp from the trenches   (1st edition, Chinese)
Scrum and xp from the trenches (1st edition, Chinese)Jen-Chieh Ko
 
アンチフラジャイルの世界
アンチフラジャイルの世界アンチフラジャイルの世界
アンチフラジャイルの世界Yoshitaka Kawashima
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意Yoshitaka Kawashima
 
從乙方PM的角度看敏捷
從乙方PM的角度看敏捷從乙方PM的角度看敏捷
從乙方PM的角度看敏捷KC Liu
 
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8Koichiro Matsuoka
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)Yoshitaka Kawashima
 
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1  ドメイン駆動設計の基本を理解する3週連続DDDその1  ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する増田 亨
 
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したことドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したことBIGLOBE Inc.
 
CH02 API Governance
CH02 API Governance CH02 API Governance
CH02 API Governance Rick Hwang
 
【經理人講堂】目標設定:14項規劃工具
【經理人講堂】目標設定:14項規劃工具【經理人講堂】目標設定:14項規劃工具
【經理人講堂】目標設定:14項規劃工具周建良 Zhou Jian Liang
 
DDD TW Conference 2020 與RD一起跳坑DDD (20201127)
DDD TW Conference 2020 與RD一起跳坑DDD (20201127)DDD TW Conference 2020 與RD一起跳坑DDD (20201127)
DDD TW Conference 2020 與RD一起跳坑DDD (20201127)Sylvia Yang
 
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]Koichiro Matsuoka
 
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)NTT DATA Technology & Innovation
 
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計Andrew Wu
 
ドメイン駆動設計入門
ドメイン駆動設計入門ドメイン駆動設計入門
ドメイン駆動設計入門Takuya Kitamura
 
從零開始做架構圖
從零開始做架構圖從零開始做架構圖
從零開始做架構圖Philip Zheng
 
Pattern based problem solving-published
Pattern based problem solving-publishedPattern based problem solving-published
Pattern based problem solving-publishedteddysoft
 
4年前にRustで新規プロダクトを?!枯れてない技術の採択にまつわるエトセトラ:developers summit 2023 10-d-8
4年前にRustで新規プロダクトを?!枯れてない技術の採択にまつわるエトセトラ:developers summit 2023 10-d-84年前にRustで新規プロダクトを?!枯れてない技術の採択にまつわるエトセトラ:developers summit 2023 10-d-8
4年前にRustで新規プロダクトを?!枯れてない技術の採択にまつわるエトセトラ:developers summit 2023 10-d-8Yusuke Mori
 

What's hot (20)

微服務架構 導入經驗分享 吳剛志 - Community Open Camp
微服務架構 導入經驗分享 吳剛志 - Community Open Camp微服務架構 導入經驗分享 吳剛志 - Community Open Camp
微服務架構 導入經驗分享 吳剛志 - Community Open Camp
 
Humble Object Patternな話
Humble Object Patternな話Humble Object Patternな話
Humble Object Patternな話
 
Scrum and xp from the trenches (1st edition, Chinese)
Scrum and xp from the trenches   (1st edition, Chinese)Scrum and xp from the trenches   (1st edition, Chinese)
Scrum and xp from the trenches (1st edition, Chinese)
 
アンチフラジャイルの世界
アンチフラジャイルの世界アンチフラジャイルの世界
アンチフラジャイルの世界
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 
從乙方PM的角度看敏捷
從乙方PM的角度看敏捷從乙方PM的角度看敏捷
從乙方PM的角度看敏捷
 
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
 
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1  ドメイン駆動設計の基本を理解する3週連続DDDその1  ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する
 
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したことドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
 
CH02 API Governance
CH02 API Governance CH02 API Governance
CH02 API Governance
 
【經理人講堂】目標設定:14項規劃工具
【經理人講堂】目標設定:14項規劃工具【經理人講堂】目標設定:14項規劃工具
【經理人講堂】目標設定:14項規劃工具
 
DDD TW Conference 2020 與RD一起跳坑DDD (20201127)
DDD TW Conference 2020 與RD一起跳坑DDD (20201127)DDD TW Conference 2020 與RD一起跳坑DDD (20201127)
DDD TW Conference 2020 與RD一起跳坑DDD (20201127)
 
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
 
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
 
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
 
ドメイン駆動設計入門
ドメイン駆動設計入門ドメイン駆動設計入門
ドメイン駆動設計入門
 
從零開始做架構圖
從零開始做架構圖從零開始做架構圖
從零開始做架構圖
 
Pattern based problem solving-published
Pattern based problem solving-publishedPattern based problem solving-published
Pattern based problem solving-published
 
4年前にRustで新規プロダクトを?!枯れてない技術の採択にまつわるエトセトラ:developers summit 2023 10-d-8
4年前にRustで新規プロダクトを?!枯れてない技術の採択にまつわるエトセトラ:developers summit 2023 10-d-84年前にRustで新規プロダクトを?!枯れてない技術の採択にまつわるエトセトラ:developers summit 2023 10-d-8
4年前にRustで新規プロダクトを?!枯れてない技術の採択にまつわるエトセトラ:developers summit 2023 10-d-8
 

Similar to Dci vs aggregate_dddtw_2021-0.3-16-9

Json ld 簡介
Json ld 簡介Json ld 簡介
Json ld 簡介bobo52310
 
Big Data, NoSQL, and MongoDB
Big Data, NoSQL, and MongoDBBig Data, NoSQL, and MongoDB
Big Data, NoSQL, and MongoDBMonster Supreme
 
Sequoia db 技术概述_sacc
Sequoia db 技术概述_saccSequoia db 技术概述_sacc
Sequoia db 技术概述_saccwangzhonnew
 
開放原始碼 Ch2.4 app - oss - db (ver 1.0)
開放原始碼 Ch2.4   app - oss - db (ver 1.0)開放原始碼 Ch2.4   app - oss - db (ver 1.0)
開放原始碼 Ch2.4 app - oss - db (ver 1.0)My own sweet home!
 
ElasticSearch Introduction
ElasticSearch IntroductionElasticSearch Introduction
ElasticSearch IntroductionTsungWei Hu
 
2020 11-27 Taiwan DDD Conference
2020 11-27 Taiwan DDD Conference2020 11-27 Taiwan DDD Conference
2020 11-27 Taiwan DDD ConferenceGuan-Rong Huang
 
Metadata and Interoperability
Metadata and InteroperabilityMetadata and Interoperability
Metadata and InteroperabilityZhang Ren
 
语义互操作与关联数据
语义互操作与关联数据语义互操作与关联数据
语义互操作与关联数据Shanghai Library
 
数据库系统设计漫谈
数据库系统设计漫谈数据库系统设计漫谈
数据库系统设计漫谈james tong
 
深入学习Mongo db
深入学习Mongo db深入学习Mongo db
深入学习Mongo dbLucien Li
 
使用Dsl改善软件设计
使用Dsl改善软件设计使用Dsl改善软件设计
使用Dsl改善软件设计mingjin
 
Azure Data Lake 簡介
Azure Data Lake 簡介Azure Data Lake 簡介
Azure Data Lake 簡介Herman Wu
 
賽門鐵克 Storage Foundation 6.0 簡報
賽門鐵克 Storage Foundation 6.0 簡報賽門鐵克 Storage Foundation 6.0 簡報
賽門鐵克 Storage Foundation 6.0 簡報Wales Chen
 

Similar to Dci vs aggregate_dddtw_2021-0.3-16-9 (20)

Json ld 簡介
Json ld 簡介Json ld 簡介
Json ld 簡介
 
Big Data, NoSQL, and MongoDB
Big Data, NoSQL, and MongoDBBig Data, NoSQL, and MongoDB
Big Data, NoSQL, and MongoDB
 
Sequoia db 技术概述_sacc
Sequoia db 技术概述_saccSequoia db 技术概述_sacc
Sequoia db 技术概述_sacc
 
Entities in DCPS (DDS)
Entities in DCPS (DDS)Entities in DCPS (DDS)
Entities in DCPS (DDS)
 
開放原始碼 Ch2.4 app - oss - db (ver 1.0)
開放原始碼 Ch2.4   app - oss - db (ver 1.0)開放原始碼 Ch2.4   app - oss - db (ver 1.0)
開放原始碼 Ch2.4 app - oss - db (ver 1.0)
 
ElasticSearch Introduction
ElasticSearch IntroductionElasticSearch Introduction
ElasticSearch Introduction
 
Entities in DCPS (DDS)
Entities in DCPS (DDS)Entities in DCPS (DDS)
Entities in DCPS (DDS)
 
2020 11-27 Taiwan DDD Conference
2020 11-27 Taiwan DDD Conference2020 11-27 Taiwan DDD Conference
2020 11-27 Taiwan DDD Conference
 
Metadata and Interoperability
Metadata and InteroperabilityMetadata and Interoperability
Metadata and Interoperability
 
Dpl in action
Dpl in actionDpl in action
Dpl in action
 
hibernate
hibernatehibernate
hibernate
 
语义互操作与关联数据
语义互操作与关联数据语义互操作与关联数据
语义互操作与关联数据
 
数据库系统设计漫谈
数据库系统设计漫谈数据库系统设计漫谈
数据库系统设计漫谈
 
深入学习Mongo db
深入学习Mongo db深入学习Mongo db
深入学习Mongo db
 
DDD引導
DDD引導DDD引導
DDD引導
 
使用Dsl改善软件设计
使用Dsl改善软件设计使用Dsl改善软件设计
使用Dsl改善软件设计
 
Azure Data Lake 簡介
Azure Data Lake 簡介Azure Data Lake 簡介
Azure Data Lake 簡介
 
Excel VBA
Excel VBAExcel VBA
Excel VBA
 
賽門鐵克 Storage Foundation 6.0 簡報
賽門鐵克 Storage Foundation 6.0 簡報賽門鐵克 Storage Foundation 6.0 簡報
賽門鐵克 Storage Foundation 6.0 簡報
 
No sql
No sqlNo sql
No sql
 

More from teddysoft

Dci vs aggregate_dddtw_2021-0.3-preview
Dci vs aggregate_dddtw_2021-0.3-previewDci vs aggregate_dddtw_2021-0.3-preview
Dci vs aggregate_dddtw_2021-0.3-previewteddysoft
 
Agile the timeless way of software development-2019-05-17-v1.2-published
Agile the timeless way of software development-2019-05-17-v1.2-publishedAgile the timeless way of software development-2019-05-17-v1.2-published
Agile the timeless way of software development-2019-05-17-v1.2-publishedteddysoft
 
從Bowling Game Kata看敏捷開發
從Bowling Game Kata看敏捷開發從Bowling Game Kata看敏捷開發
從Bowling Game Kata看敏捷開發teddysoft
 
當Scrum遇到Pattern
當Scrum遇到Pattern當Scrum遇到Pattern
當Scrum遇到Patternteddysoft
 
說出一嘴好設計 1.1
說出一嘴好設計 1.1說出一嘴好設計 1.1
說出一嘴好設計 1.1teddysoft
 
洗白你的軟體架構
洗白你的軟體架構洗白你的軟體架構
洗白你的軟體架構teddysoft
 
如何學好設計模式
如何學好設計模式如何學好設計模式
如何學好設計模式teddysoft
 
Bdd atdd sbe_tdd_ddd_published
Bdd atdd sbe_tdd_ddd_publishedBdd atdd sbe_tdd_ddd_published
Bdd atdd sbe_tdd_ddd_publishedteddysoft
 
重構三兩事
重構三兩事重構三兩事
重構三兩事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 (20)

Dci vs aggregate_dddtw_2021-0.3-preview
Dci vs aggregate_dddtw_2021-0.3-previewDci vs aggregate_dddtw_2021-0.3-preview
Dci vs aggregate_dddtw_2021-0.3-preview
 
Agile the timeless way of software development-2019-05-17-v1.2-published
Agile the timeless way of software development-2019-05-17-v1.2-publishedAgile the timeless way of software development-2019-05-17-v1.2-published
Agile the timeless way of software development-2019-05-17-v1.2-published
 
從Bowling Game Kata看敏捷開發
從Bowling Game Kata看敏捷開發從Bowling Game Kata看敏捷開發
從Bowling Game Kata看敏捷開發
 
當Scrum遇到Pattern
當Scrum遇到Pattern當Scrum遇到Pattern
當Scrum遇到Pattern
 
說出一嘴好設計 1.1
說出一嘴好設計 1.1說出一嘴好設計 1.1
說出一嘴好設計 1.1
 
洗白你的軟體架構
洗白你的軟體架構洗白你的軟體架構
洗白你的軟體架構
 
如何學好設計模式
如何學好設計模式如何學好設計模式
如何學好設計模式
 
Bdd atdd sbe_tdd_ddd_published
Bdd atdd sbe_tdd_ddd_publishedBdd atdd sbe_tdd_ddd_published
Bdd atdd sbe_tdd_ddd_published
 
重構三兩事
重構三兩事重構三兩事
重構三兩事
 
了解模式讓你更敏捷 (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-16-9