作者:
wulouise (在線上!=在電腦前)
2020-10-18 16:15:30在討論oop fp 或任何概念之前
需要討論的是你的使用情境(context)
沒有context就只是在討論信仰
一開始沒有討論context,所以後面討論一定是到處互打,大家都覺得自己對
所以回這篇文的時候麻煩先描述想討論的context
為什麼需要設計概念?
通常不外乎兩件事情
1. 降低維護成本
2. 降低開發成本
通常的情境你需要的是1+2的最小值
但是很多情景有人只看2讓1一直增加
假如是demo,只需要2,不然通常要1
然後再來看兩個概念之間的差異
Functional programming
用什麼方式降低開發與維護成本
1. Avoid state
2. Using immutable data.
所以維護成本其實不容易爆炸,因為你的unit test就是規格的全部
reuse 就是拿這個function reuse.
而且理解難度相對低
Object oriented programming
採用以下方式降低開發維護成本
1. SOLID
2. Design Pattern
如果遇到必要的複雜設計 design patter可以降低溝通成本 (通常會增加維護成本)
3. Inheritance
4. Polymorphism
5. KISS
6. [Insert any you want to add]
OOP最大的問題就是他太容易變得很複雜
不管是高手寫得或是新手寫得,複雜度都可以不小心膨脹很多
各種principles & patterns 更是火上加油
造成各種over generalized design
不小心就被過去的歷史backfired
舉個最常聽到的,有誰用global singleton然後可以很好地refactor?
有好解法麻煩分享一下
所以OOP最重要的原則我覺得是KISS (不論context)
Keep it stupid simple
啊對,KISS是我的信仰,所以不開放回文戰,不用浪費各位時間
FP跟OOP不是互斥關係
兩者在特定context都有表現好的地方
選擇適合的方式才是重點