---
# System prepended metadata

title: 讀書會-重購筆記
tags: [重構, CodeSense]

---

 ###### tags: `CodeSense` `重構`
 
 # 讀書會-重購筆記
 
 ## 2019/11/13 
 - Lazy Class
      - 別開創無所謂的Class(Ex 指宣告一個變數, Inline Class),邏輯資料相同可以使用繼承延伸,Super Class。要設計Class仙藥思考它的合理性。
 
 - Speculative Generality
     - 在設計時，預留太多未來可能會用的擴充點。彈性使用Template模式，然後寫成介面，ConcreateClass去設計跟Imp。
    - 遇到不能關閉的程式，要考慮好資源回收與OOM問題。
        - 1.Collapse Hierachy
        - 2.Inline Class
        - 3.Remove Parameter
        - 4.Remove Method

- Temporay Field
  - Class欄位過多，在替代變數命名尚不清楚會讓開發者混淆，這是在開發過程中在需求還不清楚會常遇到，盡量避免這種狀況發生。
    
 - Message Chains(過度耦合訊息練)
    - Fun串Fun太多得意思....使用垂直折疊、提取或是使用委託與封裝，使用注入。
  
 - Middle Man(中間轉手人)
     - Class放與這個Class不相干的內容，邏輯提煉出來其他模組，或使用把功能寫成父類別繼承，或用注入盡量避免這件事情
  
 - Inappropriate Intimacy(互相依賴)
    - 過度互相依賴，或是沒邏輯性的互相依賴(亂使用繼承)。 讀卡機讀取票卡例子(讀卡機，票卡自己也需判斷黑名單)。
        - 1.可以定義一個卡片Interface(鎖卡，解卡，判斷)。此Interface讓讀卡機繼承，讓讀卡機注入...(依賴注入,RW定義一個介面，再去實作)
         - 2.使用委託註冊介面. Call Back方式把有註冊過的方式拉進Class做處理。
    
 - Alternative Class with different Interface(異曲同工的類別)
     - 做Extract SuperClass
     -
 - Incomplete Libary Class(不完美程式庫類別)
    - 如果要改一點類別庫直接修改，大改套模式..EX:套裝飾者模式,或使用繼承~~~ New程式碼直接延接

 - Data Class(純稚資料類別)
     - 如果你有資料結構Class專門存取，很多Class會使用他，建議寫Get Set(c#直接產生)。

 - Refuesed Bequest(被拒絕的遺贈)
     - 繼承錯誤. 
     
 - Comments(過多的註釋)
    - 包Package或好的命名可以避免