面向?qū)ο髒s基于對(duì)象
看到了一種說(shuō)法,很多所謂面向?qū)ο箝_(kāi)發(fā)只不過(guò)是基于對(duì)象的開(kāi)發(fā)。反思自身,發(fā)覺(jué)一針見(jiàn)血。
我們所謂的面向?qū)ο螅瑢?shí)際上只不過(guò)封裝了業(yè)務(wù)對(duì)象,分出了層次,提供了接口。雖然在設(shè)計(jì)和實(shí)現(xiàn)的時(shí)候使用到了面向?qū)ο蟮姆庋b,但現(xiàn)在看來(lái)還算不上真正的面向?qū)ο螅荒芩闶腔趯?duì)象而已。
面向?qū)ο蟮脑瓌t并沒(méi)有符合。面向?qū)ο蟮膬?yōu)勢(shì)也沒(méi)有發(fā)揮,反而感覺(jué)一個(gè)小變化就牽扯到多層的變動(dòng),麻煩。就好比去年的項(xiàng)目,數(shù)據(jù)庫(kù)采用ORACLE,實(shí)際本身對(duì)ORACLE并不熟悉,只經(jīng)過(guò)不到一周的學(xué)習(xí),就上馬了。結(jié)果只不過(guò)將ORACLE當(dāng)成MSSQL使用。ORACLE的強(qiáng)大不但沒(méi)有體現(xiàn)(到現(xiàn)在也沒(méi)有搞明白),反而失去了MSSQL的好的經(jīng)驗(yàn)。得不償失。
不過(guò),如何才算真正的面向?qū)ο竽兀肯肓讼胍粋€(gè)好的面向?qū)ο蟮膶?shí)踐,應(yīng)該是達(dá)到最大限度的軟件復(fù)用,并且可以快速適應(yīng)不斷變化的需求,而對(duì)已有的部分影響最小。
這不是一蹴而就的事情,如果想真正的用項(xiàng)目來(lái)實(shí)踐的話(huà),正確的步驟也許應(yīng)該是:
首先采用本身較熟悉的開(kāi)發(fā)方法(基于對(duì)象或是面向過(guò)程)滿(mǎn)足業(yè)務(wù)需求。這一步很關(guān)鍵,只有有了這樣一個(gè)原型才可以驗(yàn)證對(duì)需求的滿(mǎn)足程度。個(gè)人感覺(jué)直接面向?qū)ο髸?huì)陷入設(shè)計(jì)過(guò)度,并且在前期耗費(fèi)大量的精力。更重要的是使用不熟悉的技術(shù)會(huì)帶來(lái)風(fēng)險(xiǎn),得不償失。
然后逐漸的將采用真正的面向?qū)ο蟮姆椒▽F(xiàn)有的原型進(jìn)行重構(gòu)。目的是提高性能,靈活性,擴(kuò)展性,可復(fù)用性等等,這是一個(gè)長(zhǎng)期的不斷迭代的過(guò)程。可以參看經(jīng)典的《重構(gòu)-改善代碼質(zhì)量》。
最后一步是架構(gòu)的提煉。將系統(tǒng)中的可以外部復(fù)用的部分提煉出來(lái)形成一個(gè)可以復(fù)用的框架架構(gòu)。有了它,以后的開(kāi)發(fā)相會(huì)事半功倍。此步驟將會(huì)用到重構(gòu)和設(shè)計(jì)模式。整個(gè)的過(guò)程除了第一步和面向?qū)ο鬅o(wú)大關(guān)系外,后兩步則完全的面向對(duì)象的思想。
在此之前總是希望先有一個(gè)設(shè)計(jì)良好的架構(gòu),一直這樣不斷的學(xué)習(xí)和進(jìn)行實(shí)踐。結(jié)果卻不盡人意。經(jīng)驗(yàn)說(shuō)明這樣做確實(shí)有些本末倒置。正如模式的使用一樣,在動(dòng)機(jī)不明確的情況下盲目的套用模式是沒(méi)有意義的。
每一個(gè)開(kāi)發(fā)人員的腦袋中有一些非常美妙的創(chuàng)意,這些創(chuàng)意沒(méi)有實(shí)現(xiàn)的一個(gè)原因就是,太過(guò)關(guān)注細(xì)節(jié)。對(duì)于面向?qū)ο筮€是基于對(duì)象開(kāi)發(fā),對(duì)于實(shí)現(xiàn)需求,完成項(xiàng)目的初期階段,真的無(wú)所謂。當(dāng)需要考慮提高開(kāi)發(fā)和維護(hù)效率的時(shí)候,面向?qū)ο缶统闪撕懿诲e(cuò)的選擇。