發覺Design Pattern 呢一本書幾有用.

94 回覆
45 Like 4 Dislike
2022-09-02 14:58:51
重點係乜
2022-09-02 15:31:34
Oo 同點reuse d element
2022-09-02 15:40:02
通常寫咩system 會用 functional programming?
2022-09-02 15:41:40
Web囉, reactjs doc都成日標榜自己行functional
2022-09-02 15:44:19
咁backend 來講呢?寫erp 果啲好似多數用oop?
2022-09-02 16:03:41
Any functional programming patterns reference?
2022-09-02 17:31:32
凡有 ”Pattern” 一字,就有紛爭,有紛爭就有恩怨, 有恩怨就有江湖


。。。 。。。


[ "Pattern" 就係江湖 ]

這是一件陳年往事,但記憶依舊鮮明,血腥味依然中人欲嘔:

A:「你呢度點解用 strategy pattern, 而唔用 visitor pattern 」

B: 「雖然我有multiple operations, 但只有一個context, 唔駛用到 visitor pattern。 」

A:「邊個話你得一個 context, 你又有 address context 又有 phone context, 兩個都support lookup operation, 已經係典型嘅 visitor pattern, 你有無考慮過睇熟本 gof 先 ?」


B: 「對唔住, gof 未必啱哂。 佢話 visitor pattern 係為咗 add future method without altering the class definition, 我已經唔同意。 太多其他pattern 可以滿足 open / closed , gof 無解釋過點解一定要用 visitor pattern。 而且 “add future method” 呢度已經開始墮入 overengineering 嘅陷阱」


A:「所以我叫你睇多次 gof, 因為你根本唔熟。 滿足 open / closed 係 visitor pattern 嘅其中一個好處, 並唔係佢嘅目的。 同樣滿足 open / closed 嘅仲有 strategy pattern, decorative pattern, adapter pattern, 但呢啲 pattern 都唔係單純為 open / closed 而生。 而且 "add future method" 係你嘅用詞,帶有貶義成分。 gof 用嘅詞語係 extensible, 亦即係 open / closed principle 入面嘅 “open” 」


B: 「其實你越講就越印證 gof 唔係啱哂。 visitor pattern 嘅真正意義唔係令你 extensible, 而係 support multiple dispatch。 呢句唔係我講,係殿堂級人物 Scott Meyers 講嘅。我哋條 team 用 java, 已經support multiple dispatch, 用 visitor pattern 係多餘」


A: 「你唔熟 gof 都算, 點解連 java 都唔熟 ? java 根本係 single dispatch。」


B: 「 contactContext.lookup("9876-5432"), contactContext 係 polymorphic instance。 請問個 method resolution 係幾時發生? 係 compile time 定 runtime ?」

A: 「 runtime 」

B: 「 既然係咁,resolved method 會隨住 contactContext 嘅 concrete type 不同而變化,啱唔啱? 」

A: 「啱。所以 ?」

B: 「所以 java 係 multiple dispatch」

A: 「呢啲叫 dynamic dispatch。 Java 係 single dynamic disptach language。 不如叫你 Team Lead 出嚟, 我有啲嘢同佢講。」


5 分鐘後 Team Lead 進場, 望住A:「屌,copy and paste 算鳩數啦, KISS 呀,仲 visitor pattern。」, 又望住B:「DLLM, 你連 java 係唔係 multiple dispatch 都搞亂,邊個 in 你架?」 , 又望住我:「兩條撚樣嘈足成個鐘都唔制止下,知唔撚知阻住人放工呀?」


自此,A 和 B 互相仇恨,Team 內氣氛變得異常肅殺。 兩人勢不兩立,一眾 developer 漸漸分為A黨和 B黨。 少數清流如我, 經常成為磨心。黨爭越演越烈,人心渙散,人才紛紛離職。 眼見本來不錯的班底日漸分崩離析,高層決定平息風波,辭退AB二人。


記得兩人同日 last day,只有我為他們送行。
B 搭著我的肩膀,眼眶微紅:「曾經有條撚樣講過,人最大的煩惱就是記性太好。 哼,我偏偏忘記 java 是 single dispatch。 」, 我聳了聳肩,尚未開口,他已消失於偌大的 office中。


A 似乎憤恨如昔,背著我冷冷説道:「技不如人又要面子,也只有你會和他做朋友」, 我嘗試爭辯:「 我也和你做朋友。 為一點小事,葬送一個大好 project, 值得嗎?」, A沉默半餉:「不值得, 但我痛快」。 我默然嘆息,問道:「今後有何打算?」, A很爽快:「去一個無人認識的地方,再闖個名堂。 要是日後你在同行之間,聽説一個乜撚都用 visitor pattern 的人,那個一定是我。」 。。。。二人的面貌我已記不清,我只知道,每個人都會堅持自己的信念,在別人看來,是浪費時間,他們卻覺得很重要。

《完》
2022-09-02 17:48:08
tldr 完。
2022-09-02 18:38:46
No patterns. Only functions.
2022-09-02 18:46:29
睇language. Java寫既就一定係OOP. Python / Javascript 可以係functional / procedural / OO.
2022-09-02 19:08:15
外國interview 好鐘意問design pattern
2022-09-02 19:26:39
勉強講, fp language 可以有 decorator pattern
Coz decorating on one function is somehow the same as composing functions

Python有
Javascript未有
Typescript有, 但淨係class method先做到所以唔算
2022-09-02 19:38:06
叫得pattern就即係有對應既problem...
而且係常見到時常用到同一個solution先會產生pattern
所以design pattern就得同language/framework既缺點
每一種language/framework都會有自身唔同既design pattern
硬係拎GoF去apply係其他language/framework度係多9餘的
2022-09-02 19:47:27
依家先睇會唔會太遲
2022-09-02 21:20:34
睇會可能會有貨
2022-09-02 21:30:34
作為一個社畜,學好編程、算法係應份嘅
2022-09-02 21:34:25
我認我廢、但y3睇過、真係好多野唔明,棄咗
不過依家睇應該又可以明多啲
2022-09-02 21:37:32
痴撚線
Btw team lead無錯 除非起新野
唔係既話唔該respect convention
2022-09-02 21:57:52
Java 唔係一定OO嘅
https://www.vavr.io/
2022-09-02 22:02:30
pattern 根本好撚主觀
何況你個一刻覺得 extend 到
唔代表永遠都係
吹水台自選台熱 門最 新手機台時事台政事台World體育台娛樂台動漫台Apps台遊戲台影視台講故台健康台感情台家庭台潮流台美容台上班台財經台房屋台飲食台旅遊台學術台校園台汽車台音樂台創意台硬件台電器台攝影台玩具台寵物台軟件台活動台電訊台直播台站務台黑 洞