心得


本篇文章心得,由閱讀Dan Abramov的文章The WET Codebase,以及其於Deconstruct議程中的演講而來。

本演講一個重點是抽象化的代價,當我們發現模組有相似功能時,常常迫不及待,將這些功能抽高層次,在被各模組引用,但有時候這種「最佳化Practice」可能會帶來一些負面效果,有可能在各模組有特殊需求時,導致抽象化的功能變得不三不四,尤其在各模組維護開發人員來來去去的時候,最後抽象化功能已經無人可以理解。

但在工程文化中,很少人有勇氣建議Copy-Paste,去重工同樣的功能,但有時候可能這是更好的解決辦法,不過如Dan,所說,這些Best Practice很多時候,是經由時代傳承,可能已經過度扁平化,除了傳承這些最佳解外,或許更重要的是能理解他們所要解決的問題,和會付出的成本,不應該永遠不思考,直接去「最佳化」。

他最後提供了三個想要抽象化時的一些建議:

  • Test concrete code 單元測試,應該放在concrete層級,這樣未來取消抽象化層級時,能測試改變的結果;如果測試寫在抽象化層級,當之後取消抽象化,所有測試都要重新撰寫。
  • Delay adding layers 雖然大家都很有衝動想要抽象化重複的功能,但有時候或許他們並沒那麼像,只是巧合,也或許之後會帶來更大的成本,因此稍微喘口氣,不要太激動。
  • Be ready to inline it 真的遇到不符狀況的抽象化時,就大膽的把他拉回concrete層級吧!

Comments