經過多年學習與使用物件導向程式設計(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 !
留言