這個章節可以算是,本書整個的核心重點,我目前讀到ch14,基本理解概念都是從 設計原則 SOLID 做延伸的,這個章節我反覆讀了兩三次,雖然沒有到理解透徹,不過每次讀都會多了那麼一點理解,本篇雖然有點抽象,但是就像武功心法,先存起來放著,之後慢慢會有感覺,所以本章一樣將會嘗試用我理解的方式做心得紀錄,也只截取我認為現階段我看得懂的重點.此外我目前處於有點感覺又說不清的階段,且我主要使用js開發,因此對於主要根據java c++ 等語言撰寫的案例,真心理解有限,通常一個名詞會有不同的定義,我會記錄下我最認同的比喻,並且附上相關來源,提供有需要的朋友延伸閱讀囉
1. SOLID 原則是什麼?有什麼用途
SOLID 原則告訴我們該如何將函式和資料結構安排到類別中,以及這些類別應該如何關聯,使用原則的目標是建立中層級的軟體架構,並達到能易於變化,易於理解
2. 用蓋房子比喻,架構之於程式碼的關係
- 堅固耐用的每塊磚塊← →清潔的程式碼(clean code)
- 良好設計的房屋架構 ← → 根據SOLID 原則建置的模組
- 書中提到,好的磚塊很重要,但是架構也是,也是有人用好磚塊製造大量垃圾,所以根據SOLID原則,把磚塊放在對的位置上,建立好維護且花費最少成本的好架構,在學習程式初期,總是要求自己要有好的命名,把重複的部分抽成method,並且將相關的method建立成util,或許過去我都在練習著做出好磚塊,接下來可以開始挑戰建立好模組
3. SOLID 基本介紹
-
S | SRP 單一職責原則 | 每一個軟體模組只有唯一的一個理由需要改變
-
O | OCP 開放封閉原則 | 易於更改的程式碼,應設計成允許增加新程式碼,更改系統行為,而非更動現有的程式碼
-
L | LSP 替換原則 | 建置軟體系統必須來自可互換的部分,且必須遵守相互體換契約
-
I | ISP 介面隔離原則| 軟體設計者須避免依賴他們不需要的東西
-
D | DIP 依賴反轉原則| 實作策略的高層級程式碼,不該依賴實作細節的低層層級程式碼
- 這五個原則,基本上描述了架構的許多應該,這種就像小時候家人會跟你說要學好英文 bla bla bla ,然後你雖然不知道為什麼,也無法想像他們說的好處,可是還是會努力背單字,或是耍廢,目前我正處於這種階段,但或許是接觸的還不夠多,但至少以上的原則,會做為心中的一把尺,讓我至少在每一次開發的時候停看聽,想想是否耗費腦力是往對的方向
4. 所以什麼是類別&模組?
-
我自己目前接受的定義是,類別是一個檔案,且其中包含該類別的變數和方法,模組則可能是由一個或一個以上的類別組成的,包含不同種類的類別,為了特定目的而組合而成(ex. util 模組,專門存放專案中常用的class )
-
參考資源
5. “使用SOLID建立系統中層級的架構”所以什麼是中層級?
- 大 [系統層級← 元件層級←模組層級←類別層級←程式碼層級 ] 小
- 我理解的中層級,是高於程式碼層級,並由類別組成,具有特定目的的集合,使用SOlID建立模組,並且規劃適當的關聯
6. 何謂高層級 低層級?
- 離I/O越遠的元件層級越高,離I/O越近的層級越
- 越上層的元件,擁有越核心的商業邏輯
- 用櫃檯小姐的故事來說明(下方放連結)
- 想像一下你(user)今天走進一間公司(I/O),負責接待你的,請你填寫資料的是櫃檯小姐(低層級-處理實作),如果你是來談一筆大生意的,你會經過櫃檯,走到最裡面的落地窗辦公室,老闆正在那準備跟你討論(高層級-核心商業邏輯),我覺得這個說法滿容易想像和理解的,完整內容,請參考下方連結
- 參考資源