何必非要OOP?
這篇文章其實是筆者多年以來的疑問感悟所成,估計各位居於不同語言陣營中的同道們也會有不少類似的疑問,願此文拋磚引玉,與大家共同探討OOP與程式式程式設計的是是非非。
筆者轉向Java Web程式設計前從事的是傳統的Delphi C/S程式設計。轉過來後就覺得J2EE分層太多,每到更改,每層幾乎都要涉及,相當麻煩且易出錯。在Java Web之餘,又涉及了一些ASP、PHP之類的東西,才發覺Web程式設計也可如此簡單,不禁對J2EE產生了很大的疑問:本來可以簡單實現的東西,何必搞得那麼複雜?
近兩年OO水平上漲後才逐漸領會到其中玄機。OO與分層最重要的好處其實業務邏輯及類庫的複用!OOP將資料儲存、業務邏輯、表示層分離,就可以適應多種資料儲存方式與表示層技術的變化。比方說,你就可以選用多種資料庫、XML甚至文字!也可以選擇WEB、Rich Client以至於手機、PDA。當儲存層與表示層變化時,業務層幾乎可以保持不變。原因其實也簡單:傳統的程式式程式設計是把他們在一塊寫,而OO則是分開來寫。而天下事總是利弊相當,OOP的高適應性也就必然為其帶來高度的複雜與費時,甚至修改時的麻煩。綜上所述,OOP其實是便於擴充套件而不適於修改。原因簡單之極,寫在一起的改起來只需改一處,分開寫的改起來則要改每一處。
這一點上順便提一下Sun的經典J2EE。經典J2EE其實是把OOP做到了極致,除卻上述堅決的三層分離外,EJB更把資料儲存層的事務與業務層的分散式特性加入其中。這對大型系統而言絕對是極大的福音。而中小型系統基本上是不需要事務與分散式的,這樣一搞就讓J2EE非常複雜。於是Sun的經典J2EE遭到了絕大多數中小系統應用開發者一致的口誅筆伐。可到了真正的企業級領域,J2EE的地位卻難以撼動。這充分說明了OOP的極致是適應性與複雜性的綜合體。這好比生物界中的生物,適應性越高的生物(如人類)必然越複雜。
是否採用OOP,OOP用到什麼程度,要因軟體產品的定位而論。如果考慮的是擴充套件性,業務邏輯相對固定,而儲存層、表示層變化多的情況下,OOP當是不二之選;而儲存層、表示層相對固定,業務邏輯變化大的情況下,則應選用程式式程式設計。如果二者變化程度均衡,則可採用MS騎牆式的方法。筆者這番大膽言論其實並非由理論推導而來,而緣於對當今軟體界的實際觀察。真正的企業級開發無疑J2EE是主導,這符合第一種情況;而變化迅速的網際網路界則以PHP為王,小型桌面系統至今仍以VB、PB、Delphi為佳,這符合第二種情況;而中型系統,.NET發展得最好,這正是第三種情況。
所以我們搞軟體的諸位同道,居於不同的陣營中,不免終日比短較長,其實是沒有必要的。各種語言都有他的優勢與適用範圍。做好產品、服務的市場定位與技術定位,揚長避短才是明智之舉。
筆者轉向Java Web程式設計前從事的是傳統的Delphi C/S程式設計。轉過來後就覺得J2EE分層太多,每到更改,每層幾乎都要涉及,相當麻煩且易出錯。在Java Web之餘,又涉及了一些ASP、PHP之類的東西,才發覺Web程式設計也可如此簡單,不禁對J2EE產生了很大的疑問:本來可以簡單實現的東西,何必搞得那麼複雜?
近兩年OO水平上漲後才逐漸領會到其中玄機。OO與分層最重要的好處其實業務邏輯及類庫的複用!OOP將資料儲存、業務邏輯、表示層分離,就可以適應多種資料儲存方式與表示層技術的變化。比方說,你就可以選用多種資料庫、XML甚至文字!也可以選擇WEB、Rich Client以至於手機、PDA。當儲存層與表示層變化時,業務層幾乎可以保持不變。原因其實也簡單:傳統的程式式程式設計是把他們在一塊寫,而OO則是分開來寫。而天下事總是利弊相當,OOP的高適應性也就必然為其帶來高度的複雜與費時,甚至修改時的麻煩。綜上所述,OOP其實是便於擴充套件而不適於修改。原因簡單之極,寫在一起的改起來只需改一處,分開寫的改起來則要改每一處。
這一點上順便提一下Sun的經典J2EE。經典J2EE其實是把OOP做到了極致,除卻上述堅決的三層分離外,EJB更把資料儲存層的事務與業務層的分散式特性加入其中。這對大型系統而言絕對是極大的福音。而中小型系統基本上是不需要事務與分散式的,這樣一搞就讓J2EE非常複雜。於是Sun的經典J2EE遭到了絕大多數中小系統應用開發者一致的口誅筆伐。可到了真正的企業級領域,J2EE的地位卻難以撼動。這充分說明了OOP的極致是適應性與複雜性的綜合體。這好比生物界中的生物,適應性越高的生物(如人類)必然越複雜。
是否採用OOP,OOP用到什麼程度,要因軟體產品的定位而論。如果考慮的是擴充套件性,業務邏輯相對固定,而儲存層、表示層變化多的情況下,OOP當是不二之選;而儲存層、表示層相對固定,業務邏輯變化大的情況下,則應選用程式式程式設計。如果二者變化程度均衡,則可採用MS騎牆式的方法。筆者這番大膽言論其實並非由理論推導而來,而緣於對當今軟體界的實際觀察。真正的企業級開發無疑J2EE是主導,這符合第一種情況;而變化迅速的網際網路界則以PHP為王,小型桌面系統至今仍以VB、PB、Delphi為佳,這符合第二種情況;而中型系統,.NET發展得最好,這正是第三種情況。
所以我們搞軟體的諸位同道,居於不同的陣營中,不免終日比短較長,其實是沒有必要的。各種語言都有他的優勢與適用範圍。做好產品、服務的市場定位與技術定位,揚長避短才是明智之舉。
相關文章
- 何必再憶
- OOPOOP
- python oopPythonOOP
- oop原則OOP
- POP,OOP,AOPOOP
- 物件導向(oop)物件OOP
- c# oop思想C#OOP
- oop 之繼承OOP繼承
- oop_promax_staticOOP
- implementing OOP in rustOOPRust
- OOP實驗三OOP
- D專案軼事之相識何必曾相逢
- 程式設計師何必難為程式設計師程式設計師
- 網路安全培訓何必冠以***培訓之名?薦
- [專業術語]OOPOOP
- 人們誤解了OOPOOP
- JavaScript尋蹤OOP之路JavaScriptOOP
- oop 4~6總結OOP
- 17-oop封裝OOP封裝
- 18-oop繼承OOP繼承
- OOP 1~3總結OOP
- ch07_oop_fundamentalsOOP
- 劫持TCP不一定非要是中間人TCP
- 獨特價值與模式:維基憑何非要依靠廣告生存?模式
- OOD&OOP-單例模式OOP單例模式
- [轉]OOA/OOD/OOP區別OOP
- PHP5的OOP–$this引用PHPOOP
- OOP和FP錯在哪裡?OOP
- 14-oop方法回顧OOP
- ch10_oop_advancedOOP
- OOP的多型和繼承OOP多型繼承
- 用汽車比喻理解OOP - Jonathan KuhlOOP
- Java oop04介面JavaOOP
- OOP: 理解類和物件(1) (轉)OOP物件
- OOP: 理解類和物件(2) (轉)OOP物件
- OOP4-6次作業OOP
- OOP大作業二輪總結OOP
- OOP7-8次作業OOP