跳到主要內容

我為何由OOP轉向函數式編程

 經過多年學習與使用物件導向程式設計(OOP),我漸漸轉向函數式編程結合模組化設計。

很多人學習OOP之後,認為寫程式都要套Pattern,物件要分層,宣告時要用介面而不要用類別。

這樣造成什麼結果呢?在沒必要抽象的類別大量使用抽象化設計,為了永遠用不到的彈性而去把程式寫得非常複雜,導致效能差得難以接受,為了提升效能只好大量使用快取,於是寫出來的程式又大又肥,完全沒有效率。

舉例來說,大部分的網站或是企業內部程式都很小,以企業網站為例,多年前用過一個 SageFrame 的C#架站機,它的優點是把網頁做成Web Part,每個Web Part都是獨立的Module,只要寫出ascx就可以拖拉放進去。乍看之下確實很好,開發後就發現很多困難,版型設計要符合它的設計,又因為Menu Module等把CSS設計卡住了。最要命的是運行時很慢,因為ascx都是動態編譯,加上架構複雜導致執行時會有不少的Exception產生,雖然例外被系統catch住,卻造成執行時極大的負擔。

今年敝公司遇到國外駭客在掃描網站漏洞時,就造成SageFrame幾度當機,雖然後來會恢復,但實在很令人難以接受。藉著要淘汰jQuery的機會,找年輕同事利用 Nuxt 完美複刻原本的官網,並且把原本讀資料庫的部份都改為讀取JSON檔案;最棒的是 Nuxt能夠布署為靜態HTML檔,只要把它設定成唯讀,就完全不用擔心駭客攻擊。

回來說程式風格,由於像Cursor這類AI自動產生程式越來越強,產生出來的程式確實可用,只要能確保輸入與輸出符合規格,又何必要堅持符合物件導向呢?

天下武功,雖快不破。能夠快速改變,符合規格才是王道。在大型複雜需求時,使用OOP增加彈性確實非常有用,但是在沒必要時,不需要為了OO而OO,寫程式要靈活,只要輸出九九乘法表,還把每個數字和四則運算都寫成物件不就是脫褲子放屁嗎?Think before you do it !


留言

這個網誌中的熱門文章

DBeaver 介面語言

DBeaver是我個人頗常用的一套跨平台Database管理工具,最近升級後發現Windows版本居然變成簡體中文,而且無法切換為英文。

Personal Bookmark

Java SE 6 + Firefox 2 UI 問題 As I do . Google拋棄了了SOAP API,浮想聯翩 https://www.gandi.net/ VS 2005 SP1中文版推出 Windows Vista中文版下載 ASP.NET 2.0網頁執行管線與快取原理 Cache 2.0快取架構與快取資料自動移除架構圖 flickr sync 分享與試用 SUN Looking Glass 3D圖形介面發布1.0 雅虎勵精圖治推動改革 Wait and see 國內某SOC疑遭駭客入侵 大砲開講 Very Important! 微軟公佈Vista安全程式介面草案 一窺Google開原碼庫房乾坤 qing is writing a dig girl net... wait and see

自然人憑證讀卡機驅動程式

鳥毅用的是第一代的自然人憑證讀卡機,EZ100PU(後來有同事買EZmini可以讀SIM卡似乎更好),每年報稅時用一次。 本來只是要申請些政府業務,一時之間找不到光碟,沒想到在 驅動程式下載 居然看到Linux和Mac的驅動程式,剩下的就是政府單位的網頁和程式應該改版了吧!!!