今天(2015/06/07)上了Teddy的Design Pattern 這樣學就會了- 入門實作班(第一天課程投影片)。本課程主要客群是軟體工程師,讓工程師能在做開發時用更有效的方法來做出易讀,易了解,易維護,易擴充的程式,畢竟程式是給人看的。第一天的課程著重在設計模式(Design Pattern)的觀念導入,程式實作的部分在第二天跟第三天。
感覺很多軟體設計的Pattern好像可可以用在做事情和組織設計上。這個課程也有一日卷,適合工程師以外,對設計和問題定義有興趣的朋友參加。
課程摘要
軟體設計的產出是程式還是文件?你覺得軟體的產出是哪個,時間就會放在那裡。
關於設計
好的設計定義:Context和Form間的契合度高。Fitness between context and form。
設計模式的簡單定義:Relationship between a certain context, a problem, and a solution.
別人的設計就是最好的設計(站在巨人的肩膀上)。
為什麼需要Design Patterns
- Pattern已經考慮了情境跟Force,可以直接套用。
- 可以幫助團隊溝通共同的語言。
- A pattern is a proven solution to a recurring problem in a specific context。
模式的定義:
- 一再重複出現的東西,事件,現象。
- A pattern is a process and a thing
設計模式的六大基本元素
- Name:模式名詞(名詞或動詞)
- Context:描敘問題發生的上下文
- Problem:描敘問題本身
- Force:塑造與影響問題的原因
- Solution:解決問題的方法
- Resulting Context(Consequence):套用解決問題後的結果
範例:便利商店點數積點
- Name:
- 來更多花更多
- Context:
- 便利商店的市場競爭激烈,選擇又多,要讓消費者持續來店越來越困難
- Problem:
- 如何讓消費者更經常來店,并增加每次購物金額?
- Force:
- 來便利商店買東西的原因是順便,相較量販店或雜貨店,每次購物金額不高
- 每個廠牌的便利商店差異不大
- Solution:
- 提供每N元集一點(N = 平均購物金額X 110%)
- 每次活動期間1-1.5個月
- 用點數兌換或加購贈品
- 提供有獨特性的贈品
- Resulting Context(Consequence):
- 單次消費金額提高
- 增加黏著度
- 太多活動造成冷感
- 因為贈品才來消費
- 活動結束後,來店意願下降
常見的軟體設計Pattern
- Analysis Pattern
- Software Architecture Pattern
- Design Pattern
- HCI Pattern (Human, Computer Interface)
- Implementation Pattern
- Refactoring
Pattern Based Design 的特性
- 整體先於部分,然後透過差異化的過程將整體逐步展開
- 分散式行動
- 單一心智
- 不需繁複設計圖
- 一次一個模式的展開過程
- 考慮到修復
物件導向設計觀念
- Class, Object, Instance
- Interface
- Inheritance
- Polymorphism
- 由接收訊息這決定意義,如同日常溝通一樣
- Composition
- Delegation
物件導向設計原則
- 模組化
- 減少耦合,增加內聚
- 尋找Hot Spot
- 先從人多的地方改善
- 生物多樣性原則
- Programming to an Interface, not an Implementation
- 單位間重點在資訊的交流,不是在對方具體的實現方式
- Favor object composition over class inheritance
GoF Design Patterns
- Singleton
- 在一個系統中只可以有一個存在,就套Singleton。組織中只能有一個的單位應該是HR吧,有多過一個HR會造成升遷等標準混亂。
- Observer
- State
- Facade
- Template Method
- Factory Method
- Abstract Factory
- Command
- Adapter
- Strategy
- Composite
延伸閱讀: