###### 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或好的命名可以避免