SlideShare a Scribd company logo
1 of 31
Download to read offline
Domain-Driven Design
- Ubiquitous Language
2016/12/20
Taka Wang
飛
行
監控系統
• 這個專案是
一
個監控系統,它會追蹤指定區域內的任意航班,判斷班
機是否遵照了預定的航線,以及是否可能發
生
碰撞。
• 開發
人
員: 我們想監控空中交通,應該從哪裡開始?
• 開發
人
員: 我們想監控空中交通,應該從哪裡開始?
• 專家: 讓我們從最基礎的開始吧。所有的交通由
飛
機組成。每架
飛
機
從
一
個出發點起
飛
,並在
一
個
目
的地點著陸。
• 開發
人
員: 我們想監控空中交通,應該從哪裡開始?
• 專家: 讓我們從最基礎的開始吧。所有的交通由
飛
機組成。每架
飛
機
從
一
個出發點起
飛
,並在
一
個
目
的地點著陸。
Departure Destination
Aircraft
• 開發
人
員: 很容易嘛。在
飛
行
時,
飛
機會按照駕駛員的意願選擇任何
空中線路嗎?是不是等於說他們可以決定他們能走哪條路,只要他們
能到達終點?
• 開發
人
員: 很容易嘛。在
飛
行
時,
飛
機會按照駕駛員的意願選擇任何
空中線路嗎?是不是等於說他們可以決定他們能走哪條路,只要他們
能到達終點?
• 專家: 哦不。駕駛員會收到
一
條他們應該遵照的
飛
行
路線。並且他們
必須儘可能地跟那條
飛
行
路線吻合。
• 開發
人
員: 很容易嘛。在
飛
行
時,
飛
機會按照駕駛員的意願選擇任何
空中線路嗎?是不是等於說他們可以決定他們能走哪條路,只要他們
能到達終點?
• 專家: 哦不。駕駛員會收到
一
條他們應該遵照的
飛
行
路線。並且他們
必須儘可能地跟那條
飛
行
路線吻合。
Aircraft
Destination
Departure
Route
• 開發
人
員: 我會把這條路線考慮成空中的 3D 線路。如果我們使
用
笛
卡爾系統坐標,那麼
一
條
飛
行
路線會被簡化成
一
系列 3D 的點。
• 開發
人
員: 我會把這條路線考慮成空中的 3D 線路。如果我們使
用
笛
卡爾系統坐標,那麼
一
條
飛
行
路線會被簡化成
一
系列 3D 的點。
• 專家: 我可不這麼認為。我們不會這樣看待
飛
行
路線的。
飛
行
路線實
際上是
飛
機預期的空中線路在地
面
上的映射。
飛
行
路線會穿過
一
系列
地
面
上的點。
• 開發
人
員: 我會把這條路線考慮成空中的 3D 線路。如果我們使
用
笛
卡爾系統坐標,那麼
一
條
飛
行
路線會被簡化成
一
系列 3D 的點。
• 專家: 我可不這麼認為。我們不會這樣看待
飛
行
路線的。
飛
行
路線實
際上是
飛
機預期的空中線路在地
面
上的映射。
飛
行
路線會穿過
一
系列
地
面
上的點。
Aircraft
3D Point
Fix
Route
• 專家: 這些點我們可以
用
經度和緯度來決定。
• 專家: 這些點我們可以
用
經度和緯度來決定。
• 開發
人
員: 哦,那我們可以稱每
一
個這樣的點為
一
個
方
位,因為它是
地球表
面
上的
一
個固定的點。我們將使
用
一
系列 2D 的點來描述線
路。順便說
一
句,出發點和終點都屬於
方
位。我們不再會將它們考慮
成其他不同的概念。
飛
行
路線到達終點就如同它到達其他的
方
位
一
樣。
• 專家: 這些點我們可以
用
經度和緯度來決定。
• 開發
人
員: 哦,那我們可以稱每
一
個這樣的點為
一
個
方
位,因為它是
地球表
面
上的
一
個固定的點。我們將使
用
一
系列 2D 的點來描述線
路。順便說
一
句,出發點和終點都屬於
方
位。我們不再會將它們考慮
成其他不同的概念。
飛
行
路線到達終點就如同它到達其他的
方
位
一
樣。
Aircraft
2D Point
Fix
Route
• 開發
人
員:
飛
機必須遵照
飛
行
路線,但這是否意味著它可以按照
自
己
的意願選擇
飛
行
高
度?
• 開發
人
員:
飛
機必須遵照
飛
行
路線,但這是否意味著它可以按照
自
己
的意願選擇
飛
行
高
度?
• 專家: 不。
飛
機在
一
個特定的時刻的海拔
高
度也會在
飛
行
計劃中有規定。
• 開發
人
員:
飛
機必須遵照
飛
行
路線,但這是否意味著它可以按照
自
己
的意願選擇
飛
行
高
度?
• 專家: 不。
飛
機在
一
個特定的時刻的海拔
高
度也會在
飛
行
計劃中有規定。
• 開發
人
員:
飛
行
計劃? 那是什麼意思?
• 開發
人
員:
飛
機必須遵照
飛
行
路線,但這是否意味著它可以按照
自
己
的意願選擇
飛
行
高
度?
• 專家: 不。
飛
機在
一
個特定的時刻的海拔
高
度也會在
飛
行
計劃中有規定。
• 開發
人
員:
飛
行
計劃? 那是什麼意思?
• 專家: 在離開機場之前,駕駛員會接到
一
個詳細的
飛
行
計劃,包括所有關於這次
飛
行
的信息:
飛
行
路線、巡航
高
度、巡航速度和
飛
機的類型甚
至
機組成員的信息等。
• 開發
人
員:
飛
機必須遵照
飛
行
路線,但這是否意味著它可以按照
自
己
的意願選擇
飛
行
高
度?
• 專家: 不。
飛
機在
一
個特定的時刻的海拔
高
度也會在
飛
行
計劃中有規定。
• 開發
人
員:
飛
行
計劃? 那是什麼意思?
• 專家: 在離開機場之前,駕駛員會接到
一
個詳細的
飛
行
計劃,包括所有關於這次
飛
行
的信息:
飛
行
路線、巡航
高
度、巡航速度和
飛
機的類型甚
至
機組成員的信息等。
• 開發
人
員: 噢,
飛
行
計劃看起來相當的重要。我們可得把它加到模型中。
• 開發
人
員:
飛
機必須遵照
飛
行
路線,但這是否意味著它可以按照
自
己
的意願選擇
飛
行
高
度?
• 專家: 不。
飛
機在
一
個特定的時刻的海拔
高
度也會在
飛
行
計劃中有規定。
• 開發
人
員:
飛
行
計劃? 那是什麼意思?
• 專家: 在離開機場之前,駕駛員會接到
一
個詳細的
飛
行
計劃,包括所有關於這次
飛
行
的信息:
飛
行
路線、巡航
高
度、巡航速度和
飛
機的類型甚
至
機組成員的信息等。
• 開發
人
員: 噢,
飛
行
計劃看起來相當的重要。我們可得把它加到模型中。
2D Point
Fix
Route
Aircraft Flight Plan
• 開發
人
員: 好多了。當我看到這副圖時,我會瞭解到很多事情。在監
控空中交通時,我們其實並不對
飛
機本
身
感興趣,不管它是
白
色
的還
是藍
色
的,也不管它是“波
音
”的還是“空中巴
士
”的。我們對它們的“
飛
行
(
fl
ight)”感興趣。這才是我們實際上要跟蹤和度量的東
西
。我認為
我們應該對模型做出改變以保證其正確性。
2D Point
Fix
Route
Aircraft Flight Plan
2D Point
Fix
Route
Flight Flight Plan
2D Point
Fix
Route
Flight Flight Plan
用
一
個
Class來實現
從 2DPoint 繼承,或者包含
2DPoint 的object作為主要屬性
2D Point
Fix
Route
Flight Flight Plan
2D Point
Fix
Route
Flight Flight Plan
用
一
個
Class來實現
從 2DPoint 繼承,或者包含
2DPoint 的object作為主要屬性
20161220 - domain-driven design

More Related Content

More from Jamie (Taka) Wang (20)

20220113_product_day
20220113_product_day20220113_product_day
20220113_product_day
 
20200429_software
20200429_software20200429_software
20200429_software
 
20200602_insight_business
20200602_insight_business20200602_insight_business
20200602_insight_business
 
20200408_gen11_sequence_diagram
20200408_gen11_sequence_diagram20200408_gen11_sequence_diagram
20200408_gen11_sequence_diagram
 
20190827_activity_diagram
20190827_activity_diagram20190827_activity_diagram
20190827_activity_diagram
 
20150722 - AGV
20150722 - AGV20150722 - AGV
20150722 - AGV
 
20161220 - microservice
20161220 - microservice20161220 - microservice
20161220 - microservice
 
20160217 - Overview of Vortex Intelligent Data Sharing Platform
20160217 - Overview of Vortex Intelligent Data Sharing Platform20160217 - Overview of Vortex Intelligent Data Sharing Platform
20160217 - Overview of Vortex Intelligent Data Sharing Platform
 
20151111 - IoT Sync Up
20151111 - IoT Sync Up20151111 - IoT Sync Up
20151111 - IoT Sync Up
 
20151207 - iot strategy
20151207 - iot strategy20151207 - iot strategy
20151207 - iot strategy
 
20141210 - Microservice Container
20141210 - Microservice Container20141210 - Microservice Container
20141210 - Microservice Container
 
20161027 - edge part2
20161027 - edge part220161027 - edge part2
20161027 - edge part2
 
201610817 - edge part1
201610817 - edge part1201610817 - edge part1
201610817 - edge part1
 
Entities in DCPS (DDS)
Entities in DCPS (DDS)Entities in DCPS (DDS)
Entities in DCPS (DDS)
 
20161125 gostation
20161125 gostation20161125 gostation
20161125 gostation
 
20160420 - git intro
20160420 - git intro20160420 - git intro
20160420 - git intro
 
20170104 - transaction_pattern
20170104 - transaction_pattern20170104 - transaction_pattern
20170104 - transaction_pattern
 
20200226 - AI Overview
20200226 - AI Overview20200226 - AI Overview
20200226 - AI Overview
 
20230202 - Introduction to tis-py
20230202 - Introduction to tis-py20230202 - Introduction to tis-py
20230202 - Introduction to tis-py
 
20230104 - machine vision
20230104 - machine vision20230104 - machine vision
20230104 - machine vision
 

20161220 - domain-driven design