SlideShare a Scribd company logo
1 of 18
Download to read offline
2015/03/03讀書會分享
設計模式的解析與活用:
分析
Kane
大綱
為何需要分析
怎麼分析
封裝變化
共通性及可變性分析
關係矩陣
循序圖
為何需要分析?
寫程式就像蓋房子
為了符合spec
為了不要有bug
為了能應付spec變動
不想只當程式打字員
可以叫別人當打字員
怎樣才算好的分析?
能做出以後都不用修改的架構!
怎麼可能!?
怎麼做才能接近目標?
封裝變化
新的變動只需衍生類別,頂多微幅調整,架構基本不動
一個物件不用處理多種變化 → 高內聚
物件之間關係更清楚,可免不必要的牽連 → 鬆耦合
如何找到變化?
結構分析
找出共通性及可變性
假設變化將會出現
並嘗試預測其出現的位置
不要鐵齒!
找到共通性及可變性之後...
找出高層次設計
套用現有模式(pattern)或自己來
定義抽象類別(共通性)
責任、介面、協定
定義衍生類別(可變性)
如何實作這個變化?
Design Patterns
其實就是前人經驗集成的
免付費工具包
共通性和可變性分析 (CVA)
尋找共通性(每個共通性一個問題)
從共通性中建立抽象
從共通性的變化尋找衍生
看共通性之間的關係如何
分析矩陣(Analysis Matrix)
舉例:訂單處理系統
情況 過程
美國 根據UPS費用計算運費
使用美國郵政規則驗證地址
依當地計算銷售額和 /或服務的稅額
用美元處理金額
加拿大 用加拿大元處理金額
使用加拿大郵政規則驗證地址
透過聯邦快遞發貨到加拿大
依加拿大省的稅收規則計算銷售額和 /或服務的稅額(使用GST或PST)
分析矩陣
美國銷售 加拿大銷售
計算運費 依照UPS費率 依照聯邦快遞費率
驗證地址 使用美國郵政規則 使用加拿大郵政規則
計算稅額 使用美國和當地稅收規則 使用GST和PST
金額 美元 加拿大元
分析矩陣:擴展
美國銷售 加拿大銷售 德國銷售
計算運費 依照UPS費率 依照聯邦快遞費率 依照德國貨運公司費率
驗證地址 使用美國郵政規則 使用加拿大郵政規則 使用德國郵政規則
計算稅額 使用美國和當地稅收規則 使用GST和PST 使用德國增值稅
金額 美元 加拿大元 歐元
日期格式 mm/dd/yyyy mm/dd/yyyy dd/mm/yyyy
最大重量 30千克
所謂的變化…
分析矩陣:列&行
美國
銷售
加拿大
銷售
德國
銷售
計算
運費
計算費率的具體實作
驗證
地址
驗證地址的具體實作
計算
稅額
計算稅額的具體實作
金額 使用Money物件
日期
格式
使用Data物件
最大
重量
最大重量的具體實作
美國
銷售
加拿大
銷售
德國
銷售
計算
運費
有美國顧客時,
使用這些實作。
有加拿大顧客時,
使用這些實作。
有德國顧客時,
使用這些實作。
驗證
地址
計算
稅額
金額
日期
格式
最大
重量
高層次設計
+makeCalcTax()
+makeCalcFreight()
+makeAddrRules()
AbstractFactory
USAF CanAF GerAF
USFreight CanFreight GerFreight
CalcFreight
USAddr CanAddr GerAddr
AddrRules
USTax CanTax GerTax
CalcTax
SalesOrder
TaskController
相依
聚合
has-a
繼承
is-a
SalesOrder只知道什麼?不知道什麼?
TaskController呢?
循序圖
:TaskController :USAF SalesOrder :USAddr :USFreight :USTax
1: init
2: init giving USAF
3:
makeAddrRules
4: init
5: return
6: verify address
7: makeCalcFreight
8: init
9: return
10: calculate freight
11: makeCalcTax
12: init
13: return
14: calculate tax
封裝變化與責任
+makeCalcTax()
+makeCalcFreight()
+makeCalcAddrRules()
AbstractFactory
USAF CanAF GerAF
USFreight CanFreight GerFreight
CalcFreight
USAddr CanAddr GerAddr
AddrRules
USTax CanTax GerTax
CalcTax
SalesOrder
TaskController知道有美國來的訂單
不用知道訂單要做哪些處理
不用知道各種訂單處理規則
知道要檢查地址、計算稅率、計算運費…
不用知道實際上怎麼檢 查怎麼計算
分析矩陣:子矩陣
美國銷售 加拿大銷售
計算運費 依照美國費率 依照加拿大費率
驗證地址 使用美國郵政規則 使用加拿大郵政規則
計算稅額 使用美國和當地稅收規則 使用GST和PST
金額 美元 加拿大元
計算運費 使用美國郵政 UPS 聯邦快遞
驗證地址 使用美國郵政規則 使用美國郵政規則(無郵箱) 使用美國郵政規則
上門取貨費 不適用 $5.00 $4.00
超重限額 50磅 70磅 無限制
總結
討論高層次設計的共同語言
多看、多做、多討論、多累積
設計模式的解析與活用:分析

More Related Content

Viewers also liked

Experiments in Sharing Java VM Technology with CRuby
Experiments in Sharing Java VM Technology with CRubyExperiments in Sharing Java VM Technology with CRuby
Experiments in Sharing Java VM Technology with CRubyMatthew Gaudet
 
JVM @ Taobao - QCon Hangzhou 2011
JVM @ Taobao - QCon Hangzhou 2011JVM @ Taobao - QCon Hangzhou 2011
JVM @ Taobao - QCon Hangzhou 2011Kris Mok
 
Implementing a JavaScript Engine
Implementing a JavaScript EngineImplementing a JavaScript Engine
Implementing a JavaScript EngineKris Mok
 
Cs 1023 lec 9 design pattern (week 2)
Cs 1023 lec 9 design pattern (week 2)Cs 1023 lec 9 design pattern (week 2)
Cs 1023 lec 9 design pattern (week 2)stanbridge
 
Factory Pattern in Luster
Factory Pattern in LusterFactory Pattern in Luster
Factory Pattern in LusterJason Chung
 
Java常见问题排查
Java常见问题排查Java常见问题排查
Java常见问题排查bluedavy lin
 
第一期B類_國立臺灣大學─未來都會與大學創新學習系統
第一期B類_國立臺灣大學─未來都會與大學創新學習系統第一期B類_國立臺灣大學─未來都會與大學創新學習系統
第一期B類_國立臺灣大學─未來都會與大學創新學習系統大學創新計畫 辦公室
 
面向模式的软件体系架构
面向模式的软件体系架构面向模式的软件体系架构
面向模式的软件体系架构Weijun Zhong
 
Design Patterns in Luster
Design Patterns in LusterDesign Patterns in Luster
Design Patterns in LusterJason Chung
 
JCConf TW 2014 - Modern Design Pattern
JCConf TW 2014 - Modern Design PatternJCConf TW 2014 - Modern Design Pattern
JCConf TW 2014 - Modern Design PatternSteven Wang
 
线上问题排查交流
线上问题排查交流线上问题排查交流
线上问题排查交流Edward Lee
 
AI機器人正夯
AI機器人正夯AI機器人正夯
AI機器人正夯佳新 陳
 
Why Chatbot? 為何開發聊天機器人?
Why Chatbot?  為何開發聊天機器人?Why Chatbot?  為何開發聊天機器人?
Why Chatbot? 為何開發聊天機器人?Burton Chau
 
Design Patterns這樣學就會了:入門班 Day1 教材
Design Patterns這樣學就會了:入門班 Day1 教材Design Patterns這樣學就會了:入門班 Day1 教材
Design Patterns這樣學就會了:入門班 Day1 教材teddysoft
 
從 DevOps 到 ChatOps:War Room、Bots 與 Automation
從 DevOps 到 ChatOps:War Room、Bots 與 Automation從 DevOps 到 ChatOps:War Room、Bots 與 Automation
從 DevOps 到 ChatOps:War Room、Bots 與 AutomationChen Cheng-Wei
 
如何透過聊天機器人(Chatbot)來翻轉企業與客戶溝通方式&【凡事都有個 Bot:虛擬篇】聊天機器人的前世今生 | 20160918 科技時事報導
如何透過聊天機器人(Chatbot)來翻轉企業與客戶溝通方式&【凡事都有個 Bot:虛擬篇】聊天機器人的前世今生 | 20160918 科技時事報導  如何透過聊天機器人(Chatbot)來翻轉企業與客戶溝通方式&【凡事都有個 Bot:虛擬篇】聊天機器人的前世今生 | 20160918 科技時事報導
如何透過聊天機器人(Chatbot)來翻轉企業與客戶溝通方式&【凡事都有個 Bot:虛擬篇】聊天機器人的前世今生 | 20160918 科技時事報導 貫中 侯
 
DevOps:建造開發維運的跨界之橋 (@ C.C. Agile #37)
DevOps:建造開發維運的跨界之橋 (@ C.C. Agile #37)DevOps:建造開發維運的跨界之橋 (@ C.C. Agile #37)
DevOps:建造開發維運的跨界之橋 (@ C.C. Agile #37)Chen Cheng-Wei
 
Track B-3 解構大數據架構 - 大數據系統的伺服器與網路資源規劃
Track B-3 解構大數據架構 - 大數據系統的伺服器與網路資源規劃Track B-3 解構大數據架構 - 大數據系統的伺服器與網路資源規劃
Track B-3 解構大數據架構 - 大數據系統的伺服器與網路資源規劃Etu Solution
 
10 SQL Tricks that You Didn't Think Were Possible
10 SQL Tricks that You Didn't Think Were Possible10 SQL Tricks that You Didn't Think Were Possible
10 SQL Tricks that You Didn't Think Were PossibleLukas Eder
 

Viewers also liked (19)

Experiments in Sharing Java VM Technology with CRuby
Experiments in Sharing Java VM Technology with CRubyExperiments in Sharing Java VM Technology with CRuby
Experiments in Sharing Java VM Technology with CRuby
 
JVM @ Taobao - QCon Hangzhou 2011
JVM @ Taobao - QCon Hangzhou 2011JVM @ Taobao - QCon Hangzhou 2011
JVM @ Taobao - QCon Hangzhou 2011
 
Implementing a JavaScript Engine
Implementing a JavaScript EngineImplementing a JavaScript Engine
Implementing a JavaScript Engine
 
Cs 1023 lec 9 design pattern (week 2)
Cs 1023 lec 9 design pattern (week 2)Cs 1023 lec 9 design pattern (week 2)
Cs 1023 lec 9 design pattern (week 2)
 
Factory Pattern in Luster
Factory Pattern in LusterFactory Pattern in Luster
Factory Pattern in Luster
 
Java常见问题排查
Java常见问题排查Java常见问题排查
Java常见问题排查
 
第一期B類_國立臺灣大學─未來都會與大學創新學習系統
第一期B類_國立臺灣大學─未來都會與大學創新學習系統第一期B類_國立臺灣大學─未來都會與大學創新學習系統
第一期B類_國立臺灣大學─未來都會與大學創新學習系統
 
面向模式的软件体系架构
面向模式的软件体系架构面向模式的软件体系架构
面向模式的软件体系架构
 
Design Patterns in Luster
Design Patterns in LusterDesign Patterns in Luster
Design Patterns in Luster
 
JCConf TW 2014 - Modern Design Pattern
JCConf TW 2014 - Modern Design PatternJCConf TW 2014 - Modern Design Pattern
JCConf TW 2014 - Modern Design Pattern
 
线上问题排查交流
线上问题排查交流线上问题排查交流
线上问题排查交流
 
AI機器人正夯
AI機器人正夯AI機器人正夯
AI機器人正夯
 
Why Chatbot? 為何開發聊天機器人?
Why Chatbot?  為何開發聊天機器人?Why Chatbot?  為何開發聊天機器人?
Why Chatbot? 為何開發聊天機器人?
 
Design Patterns這樣學就會了:入門班 Day1 教材
Design Patterns這樣學就會了:入門班 Day1 教材Design Patterns這樣學就會了:入門班 Day1 教材
Design Patterns這樣學就會了:入門班 Day1 教材
 
從 DevOps 到 ChatOps:War Room、Bots 與 Automation
從 DevOps 到 ChatOps:War Room、Bots 與 Automation從 DevOps 到 ChatOps:War Room、Bots 與 Automation
從 DevOps 到 ChatOps:War Room、Bots 與 Automation
 
如何透過聊天機器人(Chatbot)來翻轉企業與客戶溝通方式&【凡事都有個 Bot:虛擬篇】聊天機器人的前世今生 | 20160918 科技時事報導
如何透過聊天機器人(Chatbot)來翻轉企業與客戶溝通方式&【凡事都有個 Bot:虛擬篇】聊天機器人的前世今生 | 20160918 科技時事報導  如何透過聊天機器人(Chatbot)來翻轉企業與客戶溝通方式&【凡事都有個 Bot:虛擬篇】聊天機器人的前世今生 | 20160918 科技時事報導
如何透過聊天機器人(Chatbot)來翻轉企業與客戶溝通方式&【凡事都有個 Bot:虛擬篇】聊天機器人的前世今生 | 20160918 科技時事報導
 
DevOps:建造開發維運的跨界之橋 (@ C.C. Agile #37)
DevOps:建造開發維運的跨界之橋 (@ C.C. Agile #37)DevOps:建造開發維運的跨界之橋 (@ C.C. Agile #37)
DevOps:建造開發維運的跨界之橋 (@ C.C. Agile #37)
 
Track B-3 解構大數據架構 - 大數據系統的伺服器與網路資源規劃
Track B-3 解構大數據架構 - 大數據系統的伺服器與網路資源規劃Track B-3 解構大數據架構 - 大數據系統的伺服器與網路資源規劃
Track B-3 解構大數據架構 - 大數據系統的伺服器與網路資源規劃
 
10 SQL Tricks that You Didn't Think Were Possible
10 SQL Tricks that You Didn't Think Were Possible10 SQL Tricks that You Didn't Think Were Possible
10 SQL Tricks that You Didn't Think Were Possible
 

Similar to 設計模式的解析與活用:分析

腾讯大讲堂05 面向对象应对之道
腾讯大讲堂05 面向对象应对之道腾讯大讲堂05 面向对象应对之道
腾讯大讲堂05 面向对象应对之道topgeek
 
腾讯大讲堂05 面向对象应对之道
腾讯大讲堂05 面向对象应对之道腾讯大讲堂05 面向对象应对之道
腾讯大讲堂05 面向对象应对之道areyouok
 
金字塔原理(清晰版)
金字塔原理(清晰版)金字塔原理(清晰版)
金字塔原理(清晰版)mumu337
 
事件風暴-領域建模
事件風暴-領域建模事件風暴-領域建模
事件風暴-領域建模國昭 張
 
金字塔原理培训演示教材
金字塔原理培训演示教材金字塔原理培训演示教材
金字塔原理培训演示教材明镜 王
 
金字塔原理培训演示教材
金字塔原理培训演示教材金字塔原理培训演示教材
金字塔原理培训演示教材明镜 王
 
數據特性 vs AI產品設計與實作
數據特性 vs AI產品設計與實作數據特性 vs AI產品設計與實作
數據特性 vs AI產品設計與實作Albert Y. C. Chen
 

Similar to 設計模式的解析與活用:分析 (7)

腾讯大讲堂05 面向对象应对之道
腾讯大讲堂05 面向对象应对之道腾讯大讲堂05 面向对象应对之道
腾讯大讲堂05 面向对象应对之道
 
腾讯大讲堂05 面向对象应对之道
腾讯大讲堂05 面向对象应对之道腾讯大讲堂05 面向对象应对之道
腾讯大讲堂05 面向对象应对之道
 
金字塔原理(清晰版)
金字塔原理(清晰版)金字塔原理(清晰版)
金字塔原理(清晰版)
 
事件風暴-領域建模
事件風暴-領域建模事件風暴-領域建模
事件風暴-領域建模
 
金字塔原理培训演示教材
金字塔原理培训演示教材金字塔原理培训演示教材
金字塔原理培训演示教材
 
金字塔原理培训演示教材
金字塔原理培训演示教材金字塔原理培训演示教材
金字塔原理培训演示教材
 
數據特性 vs AI產品設計與實作
數據特性 vs AI產品設計與實作數據特性 vs AI產品設計與實作
數據特性 vs AI產品設計與實作
 

設計模式的解析與活用:分析