Abstraction
Premature Optimization and Wrong Abstraction
以下內容來自:The Wrong Abstraction。
如果你發現自己開始在共用的程式碼中開始添加額外的參數或條件判斷是時,表示原本的抽象化可能已經不在適用。一開始的時候這個抽象化可能是正確的,但隨著需求的改變,它已經不再適用。當這個抽象化已經不再適用時,最好的方式是重新使用 duplication 的方式來寫程式,而不是在原本抽象化中的程式裡掙扎。你可以這麼做:
- 重新使用 duplication 的方式,將原本抽象化後的邏輯以 inline 的方式寫進原本呼叫它的位置
- 只保留下實際上會用到的邏輯,並移除其他不相干的
- 開始並重新進行抽象化
Tradeoff Triangle
資訊
資料來源:Premature Optimization @ Youtube
- Performance
- Velocity
- 指的是有多容易加入新的功能
- 過度強調 Velocity 的系統會太過簡單暴力,雖然加功能很容易,但簡單暴力長期下來的後果,就是會累積更多的技術債
- Adaptability
- 指的是系統有多容易根據需求變更進行改動,通常抽象化(abstraction)指的是這個
- 開始思考如果建立可複用(reusable)、可擴展(extensible)的元件
- 好的設計能兼顧 velocity,能夠在改變最少程式碼的情況下,增添新的功能
- 過度強調 Adaptability 卻可能削弱 Velocity,因為我們沒有一個全知的水晶球,所以我們的設計很難預想到那些是需要被考慮、那些又是不需要被考慮的,為什麼所有不可知的未來,設計一個超級可擴展的系統,常常反而是浪費時間。這種我們通常稱作 Overengineering。