PTT推薦

Re: [請益] 比物件導向更先進的程式設計思想?

看板Soft_Job標題Re: [請益] 比物件導向更先進的程式設計思想?作者
wulouise
(在線上!=在電腦前)
時間推噓 5 推:5 噓:0 →:8

在討論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都有表現好的地方
選擇適合的方式才是重點

-----
Sent from JPTT on my Google Pixel 4.

--
等等,我是不知道妳是看了什麼神槍手的故事,可是為什麼要拿我當靶 (′Д‵)
什麼!是黃忠和后羿的故事?他們拿的不是銃,是弓!
長門,妳手上拿著蘋果跟繩子是作什麼?今天晚餐不是關東煮是烤乳豬嗎?
連爸爸都沒弄痛過我,可不可以不要綁這麼緊,好歹鬆一點讓我有空間逃吧,古泉。
好,我認了,要射就射吧,可是請聽一下在我死前的最後一個願望。
不 要 拿 霰 彈 來.....噗滋(腦漿聲) 摘自「阿虛的最後一餐」

--

※ PTT留言評論
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.136.220.193 (臺灣)
PTT 網址
※ 編輯: wulouise (223.136.220.193 臺灣), 10/18/2020 16:16:54

jej10/18 16:21DevOps兩項都要注重 很難權衡取其一

dream112410/18 19:31

dream112410/18 19:53不過我覺得FP並非沒有你批評OOP過度複雜的問題

dream112410/18 19:54現在前端給我的感覺是不管是否真的複雜都在用狀態框架

dream112410/18 19:55是否真的好維護還是跟設計者的功力密切相關

FP不複雜的前提是他沒有state 但是正常的設計通常有state,然後就出現長得像FP的東西 每次執行結果都不一樣XD

es860310/18 21:15推這篇

strlen10/18 21:32重點根本不在模式 重點在人 就算FB 也是能寫到超難懂

FP跟OOP本來就該是並存的,只是OOP比較容易寫爛XD

※ 編輯: wulouise (114.44.72.189 臺灣), 10/19/2020 20:48:52

strlen10/19 23:26「比較容易」寫爛??你太小看那些工程師了XDDDDDD

dream112410/20 09:52對啦,本就該並存,狀態用OOP管,程序用FP管

electgpro10/21 07:53寫 pure FP 也可以管理狀態呀~

qscesz145610/22 19:19寫到後來發現真的keep simple就好

jej10/22 19:21對stupid就交給別人了

MangoTW10/23 21:46推這篇 沒有一樣作法可以打全部的 說有的真的是戰信仰