面向對象vs基于對象
看到了一種說法,很多所謂面向對象開發只不過是基于對象的開發。反思自身,發覺一針見血。
我們所謂的面向對象,實際上只不過封裝了業務對象,分出了層次,提供了接口。雖然在設計和實現的時候使用到了面向對象的封裝,但現在看來還算不上真正的面向對象,只能算是基于對象而已。
面向對象的原則并沒有符合。面向對象的優勢也沒有發揮,反而感覺一個小變化就牽扯到多層的變動,麻煩。就好比去年的項目,數據庫采用ORACLE,實際本身對ORACLE并不熟悉,只經過不到一周的學習,就上馬了。結果只不過將ORACLE當成MSSQL使用。ORACLE的強大不但沒有體現(到現在也沒有搞明白),反而失去了MSSQL的好的經驗。得不償失。
不過,如何才算真正的面向對象呢?想了想一個好的面向對象的實踐,應該是達到最大限度的軟件復用,并且可以快速適應不斷變化的需求,而對已有的部分影響最小。
這不是一蹴而就的事情,如果想真正的用項目來實踐的話,正確的步驟也許應該是:
首先采用本身較熟悉的開發方法(基于對象或是面向過程)滿足業務需求。這一步很關鍵,只有有了這樣一個原型才可以驗證對需求的滿足程度。個人感覺直接面向對象會陷入設計過度,并且在前期耗費大量的精力。更重要的是使用不熟悉的技術會帶來風險,得不償失。
然后逐漸的將采用真正的面向對象的方法將現有的原型進行重構。目的是提高性能,靈活性,擴展性,可復用性等等,這是一個長期的不斷迭代的過程。可以參看經典的《重構-改善代碼質量》。
最后一步是架構的提煉。將系統中的可以外部復用的部分提煉出來形成一個可以復用的框架架構。有了它,以后的開發相會事半功倍。此步驟將會用到重構和設計模式。整個的過程除了第一步和面向對象無大關系外,后兩步則完全的面向對象的思想。
在此之前總是希望先有一個設計良好的架構,一直這樣不斷的學習和進行實踐。結果卻不盡人意。經驗說明這樣做確實有些本末倒置。正如模式的使用一樣,在動機不明確的情況下盲目的套用模式是沒有意義的。
每一個開發人員的腦袋中有一些非常美妙的創意,這些創意沒有實現的一個原因就是,太過關注細節。對于面向對象還是基于對象開發,對于實現需求,完成項目的初期階段,真的無所謂。當需要考慮提高開發和維護效率的時候,面向對象就成了很不錯的選擇。