Slide 1

Slide 1 text

Trainer: Joey Chen Date: 2012/07/02 Object Oriented Training – Session 4

Slide 2

Slide 2 text

- 2 - 回顧 – OO三特性 封裝 繼承 多型

Slide 3

Slide 3 text

- 3 - 回顧 – 抽象 interface abstract

Slide 4

Slide 4 text

- 4 - 回顧 – SOLID S • 單一職責原則 O • 開放封閉原則 L I D

Slide 5

Slide 5 text

SOLID

Slide 6

Slide 6 text

Liskov Substitution Principle 里氏替換原則

Slide 7

Slide 7 text

- 7 -

Slide 8

Slide 8 text

- 8 - Liskov Substitution Principle • 情況 – 當父類行為不符合子類需求,且子類無法 override 時 – 當子類繼承父類,卻無法正常替代父類運作時 • 規範繼承關係 – 確保多型可正常運作

Slide 9

Slide 9 text

SOLID

Slide 10

Slide 10 text

Least Knowledge Principle ( Law of Demeter ) 最少知識原則 ( 狄米特法則 )

Slide 11

Slide 11 text

- 11 -

Slide 12

Slide 12 text

- 12 - Least Knowledge Principle • 規範封裝範圍 • 任何物件對外只開放 – 最少且缺一不可的資訊

Slide 13

Slide 13 text

SOLID

Slide 14

Slide 14 text

Interface Segregation Principle 介面隔離原則

Slide 15

Slide 15 text

- 15 - 哪一個方便使用

Slide 16

Slide 16 text

- 16 - Interface Segregation Principle • 介面的單一職責 – 介面也應該內聚,避免出現「胖」介面 • 規範依賴程度 – 一個物件對另一個物件的依賴,應建立在最小的介面上 – 不要強迫依賴了沒使用的方法,這是種介面污染 胖

Slide 17

Slide 17 text

SOLID

Slide 18

Slide 18 text

Dependency Inversion Principle 依賴反轉原則

Slide 19

Slide 19 text

- 19 - Dependency Inversion Principle • 依賴於抽象 • 高層模組不依賴於底層模組 – 都依賴於抽象

Slide 20

Slide 20 text

- 20 - 依賴於介面

Slide 21

Slide 21 text

- 21 - 結論 S O L L I D

Slide 22

Slide 22 text

- 22 - 回顧

Slide 23

Slide 23 text

- 23 - 作業 – 幫DAO穿衣服 • 原本需求 – Product資料異動時,需記錄log,查詢不用 – 對Product進行CRUD時,需檢查權限 • 重構需求 – 將權限驗證與log相關職責,從ProductDao獨立出來 – 讓ProductDao只處理CRUD的需求 • 需求異動 – 在測試環境時,不檢查權限與不記錄log – 檢查測試環境條件,請使用Context.IsTestEnvironment

Slide 24

Slide 24 text

- 24 - 原始程式 class diagram

Slide 25

Slide 25 text

- 25 - 重構的 class diagram

Slide 26

Slide 26 text

Thanks for your listening Q & A