SlideShare una empresa de Scribd logo
1 de 35
DDD 領域驅動設計
一切回到現實問題
極簡觀念系列之一
DDD是一種設計哲學,而不是工具。
為什麼要做軟體?
軟體是為了解決現實世界的問題。
人知道怎麼解決現實世界的問題。
若要電腦代勞,則需要在電腦的世界建立模型。
模型就是程式碼
為了知道我們建造出的模型有沒有發
揮作用,我們需要測試。
現實的問題經常在變化
人可以因應變化,但電腦不能。
為了讓模型因應現實問題的變化,人只好去修
改與維護模型,我們希望它是可讀性高的。
但,經過測試且可讀性高的模型就是
好的模型嗎?
模型是電腦世界中,現實問題的縮影
。
好的模型需要具備對現實問題的深入了解
。因為包含了現實的核心邏輯,好的模型
面對變動不需要常常修改;反之,壞的模
型只符合少數情境,需要常常修改。
好的模型由誰來設計
設計好的模型需要三個角色:
1.了解現實問題的人
2.建造模型的人
3.協助二者合作的人
設計好的模型需要三個角色:
1.了解現實問題的人(領域專家)
2.建造模型的人(軟體工程師)
3.協助二者合作的人(DDD專家)
設計模型需要所有人的參與。
但,領域專家和工程師討論的是同一
件事?
先找出一個統一語言。領域專家可以用統一語言描
述現實問題中的一個觀念,工程師也可以用這個統
一語言建造出電腦世界裡的一個觀念,他們討論的
就是同一回事。
如何設計好的模型
建造好的模型需要:
1.做什麼(目標)
2.用什麼做(零件)
建造好的模型需要:
1.做什麼(目標)STRATEGIC DESIGN
2.用什麼做(零件) TACTIC DESIGN
STRATEGIC DESIGN:經由討論分析現實問題
(DOMAIN),切分成能夠被解決的子問題
(SUBDOMAIN)。
STRATEGIC DESIGN:針對能夠被解決的子問題
(SUBDOMAIN),設計有界限的模型(BOUNDED
CONTEXT)。先前討論出的統一語言在模型內需保持一
致。
TACTIC DESIGN:在模型中描述對象有
兩種觀點:ENTITY 和 VALUE
OBJECT。
ENTITY是可以識別的對象,代表現實問題中的特定對
象。其屬性可隨著時間改變。在一定時間內擁有唯一的
識別標示。
VALUE OBJECT是不需識別的對象,代表現實中
不需追蹤其內容的對象。不含唯一標示也沒有生命
週期,其屬性就代表所有內容,通常設計成無法修
改。
就像這樣,TACTIC DESIGN提供我們許多工具去
設計BOUNDED CONTEXT。
這可以用來解決我們分析出的SUBDOMAIN問題
。
BOUNDED CONTEXT是答案,
SUBDOMIAN是問題。
DDD的精神,
就是學習怎麼分析SUBDOMAIN,
以及怎麼設計BOUNDED CONTEXT。
你可以接著讀:
DDD之父寫的理論書 DDD之父認可的應用書
最後,就像DDD一再強調,
做軟體是一個不斷討論與修正的過程
。
研究與實踐DDD也是。
從今天開始討論吧!
END

Más contenido relacionado

Similar a 領域驅動設計

互动设计的方法初探
互动设计的方法初探互动设计的方法初探
互动设计的方法初探yaai
 
程序员与技术
程序员与技术程序员与技术
程序员与技术ligaoren
 
不同尺寸與解析度的螢幕下,Android 程式 UI 的設計與解決方式
不同尺寸與解析度的螢幕下,Android 程式 UI 的設計與解決方式不同尺寸與解析度的螢幕下,Android 程式 UI 的設計與解決方式
不同尺寸與解析度的螢幕下,Android 程式 UI 的設計與解決方式信宏 陳
 
交互设计模式创新
交互设计模式创新交互设计模式创新
交互设计模式创新Alite Yu
 
怎样成为优秀软件模型设计者
怎样成为优秀软件模型设计者怎样成为优秀软件模型设计者
怎样成为优秀软件模型设计者mysqlops
 
我的最小项目管理工具集
我的最小项目管理工具集我的最小项目管理工具集
我的最小项目管理工具集wensheng wei
 
How to cooporeate with IT partners from a designer's viewpoint
How to cooporeate with IT partners from a designer's viewpointHow to cooporeate with IT partners from a designer's viewpoint
How to cooporeate with IT partners from a designer's viewpointNTUST
 
Thought works design pattern jiukun zhang
Thought works design pattern   jiukun zhangThought works design pattern   jiukun zhang
Thought works design pattern jiukun zhangJiuKun Zhang
 
Ddd(meetup 2) ddd with clean architecture
Ddd(meetup 2) ddd with clean architectureDdd(meetup 2) ddd with clean architecture
Ddd(meetup 2) ddd with clean architecture國昭 張
 
Ood启思录01
Ood启思录01Ood启思录01
Ood启思录01yiditushe
 
成为月薪两万白领
成为月薪两万白领成为月薪两万白领
成为月薪两万白领markhero
 
成为月薪两万白领@锐普Ppt 论坛eric wanglin
成为月薪两万白领@锐普Ppt 论坛eric wanglin成为月薪两万白领@锐普Ppt 论坛eric wanglin
成为月薪两万白领@锐普Ppt 论坛eric wanglinlvdingqing
 
Week2.how to cooporeate with it
Week2.how to cooporeate with itWeek2.how to cooporeate with it
Week2.how to cooporeate with itditl
 
移动开发敏捷实践
移动开发敏捷实践移动开发敏捷实践
移动开发敏捷实践Yuan Mai
 
66 機構設計 產品設計入門
66 機構設計 產品設計入門66 機構設計 產品設計入門
66 機構設計 產品設計入門TK Cheng
 
如何培養架構性思考(談軟體架構師必經之路)
如何培養架構性思考(談軟體架構師必經之路)如何培養架構性思考(談軟體架構師必經之路)
如何培養架構性思考(談軟體架構師必經之路)Gelis Wu
 
397 百搭百秀—搭配伴侣
397 百搭百秀—搭配伴侣397 百搭百秀—搭配伴侣
397 百搭百秀—搭配伴侣Rui (Nash) Yang
 
2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生appuniverz
 
大数据的Reactive设计范式和akka实践
大数据的Reactive设计范式和akka实践大数据的Reactive设计范式和akka实践
大数据的Reactive设计范式和akka实践Sean Zhong
 

Similar a 領域驅動設計 (20)

互动设计的方法初探
互动设计的方法初探互动设计的方法初探
互动设计的方法初探
 
程序员与技术
程序员与技术程序员与技术
程序员与技术
 
不同尺寸與解析度的螢幕下,Android 程式 UI 的設計與解決方式
不同尺寸與解析度的螢幕下,Android 程式 UI 的設計與解決方式不同尺寸與解析度的螢幕下,Android 程式 UI 的設計與解決方式
不同尺寸與解析度的螢幕下,Android 程式 UI 的設計與解決方式
 
交互设计模式创新
交互设计模式创新交互设计模式创新
交互设计模式创新
 
怎样成为优秀软件模型设计者
怎样成为优秀软件模型设计者怎样成为优秀软件模型设计者
怎样成为优秀软件模型设计者
 
我的最小项目管理工具集
我的最小项目管理工具集我的最小项目管理工具集
我的最小项目管理工具集
 
How to cooporeate with IT partners from a designer's viewpoint
How to cooporeate with IT partners from a designer's viewpointHow to cooporeate with IT partners from a designer's viewpoint
How to cooporeate with IT partners from a designer's viewpoint
 
Thought works design pattern jiukun zhang
Thought works design pattern   jiukun zhangThought works design pattern   jiukun zhang
Thought works design pattern jiukun zhang
 
Ddd(meetup 2) ddd with clean architecture
Ddd(meetup 2) ddd with clean architectureDdd(meetup 2) ddd with clean architecture
Ddd(meetup 2) ddd with clean architecture
 
Ood启思录01
Ood启思录01Ood启思录01
Ood启思录01
 
成为月薪两万白领
成为月薪两万白领成为月薪两万白领
成为月薪两万白领
 
成为月薪两万白领@锐普Ppt 论坛eric wanglin
成为月薪两万白领@锐普Ppt 论坛eric wanglin成为月薪两万白领@锐普Ppt 论坛eric wanglin
成为月薪两万白领@锐普Ppt 论坛eric wanglin
 
Week2.how to cooporeate with it
Week2.how to cooporeate with itWeek2.how to cooporeate with it
Week2.how to cooporeate with it
 
移动开发敏捷实践
移动开发敏捷实践移动开发敏捷实践
移动开发敏捷实践
 
66 機構設計 產品設計入門
66 機構設計 產品設計入門66 機構設計 產品設計入門
66 機構設計 產品設計入門
 
如何培養架構性思考(談軟體架構師必經之路)
如何培養架構性思考(談軟體架構師必經之路)如何培養架構性思考(談軟體架構師必經之路)
如何培養架構性思考(談軟體架構師必經之路)
 
397 百搭百秀—搭配伴侣
397 百搭百秀—搭配伴侣397 百搭百秀—搭配伴侣
397 百搭百秀—搭配伴侣
 
软件工程2010
软件工程2010软件工程2010
软件工程2010
 
2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生
 
大数据的Reactive设计范式和akka实践
大数据的Reactive设计范式和akka实践大数据的Reactive设计范式和akka实践
大数据的Reactive设计范式和akka实践
 

領域驅動設計