|
寒假回家原計(jì)劃是好好摸摸ANDROID的,結(jié)果因?yàn)槭仲v拿錯(cuò)書(shū)搞了范例大全回家,一水兒的范例代碼,只能用來(lái)當(dāng)手冊(cè)或者習(xí)題冊(cè),想學(xué)點(diǎn)理論的話這玩意兒不適合,所以就擱置了。還好順手帶了本講設(shè)計(jì)模式的書(shū)回來(lái),姑且看一看,小小總結(jié)一下第一階段的學(xué)。
我堅(jiān)信,一切所謂的思想和方法都是在建立在一種本質(zhì)和基礎(chǔ)之上的,那就是要以最短時(shí)間開(kāi)發(fā)出最優(yōu)秀的產(chǎn)品。話雖然說(shuō)的沒(méi)錯(cuò),作為學(xué)生的我,那種脫離實(shí)際的學(xué)生式的空想讓我忽略了很多十分重要的東西。比如說(shuō),實(shí)際開(kāi)發(fā)過(guò)程,接手一個(gè)項(xiàng)目,不可能像學(xué)校里做試卷那樣是個(gè)定死的題目,而是一串時(shí)刻都在變化的需求(夸張了點(diǎn),大方向基本不會(huì)變,小變化經(jīng)常出現(xiàn))。再比如說(shuō),實(shí)際開(kāi)發(fā)過(guò)程并不會(huì)是單打獨(dú)斗,而是和諸位同僚一起共事合作,這種情況下的程序設(shè)計(jì)不可能任自己天馬行空,如何跟他人的代碼恰接是個(gè)十分關(guān)鍵的問(wèn)題。
結(jié)合這幾點(diǎn)和某次實(shí)際的經(jīng)驗(yàn),感觸很深。覺(jué)得那種“土方法”編程是不可能在實(shí)踐中得以生存的(自己隨手編個(gè)小程序那不叫實(shí)踐,我說(shuō)的是日后工作時(shí)干的項(xiàng)目)。書(shū)上曾有一文以”代碼無(wú)錯(cuò)就是優(yōu)?“為開(kāi)頭,我覺(jué)著很能警示人。面對(duì)書(shū)上提出的種種異常苛刻的編程環(huán)境,我無(wú)從下手。但我很清楚,這并不只是假設(shè),是作者自身十幾年工作歷程中經(jīng)常會(huì)出現(xiàn)的很現(xiàn)實(shí)的情況。
說(shuō)了很多廢話,先談?wù)剬?duì)最根本的思想”依賴(lài)倒轉(zhuǎn)原則“和”高內(nèi)聚,低耦合“的理解。首先這兩個(gè)概念非常精辟地概括了OO中的最重要的注意事項(xiàng)。也正是這兩個(gè)概念才能使得OO比之傳統(tǒng)的編程有其過(guò)人之處,而不會(huì)只是一種沒(méi)有意義的只是為了標(biāo)新立異的概念而已。根據(jù)我的理解,沒(méi)有這兩個(gè)概念支持下的OO編程不回歸C語(yǔ)言式的面向過(guò)程的老路子而不必很裝逼地面向?qū)ο蟆?shū)中在描述以上兩個(gè)概念的過(guò)程中不斷讓我想到電腦主板這樣一個(gè)很具象的事物。之所以這么認(rèn)為是因?yàn)槲矣X(jué)得,最完美的OO編程就好比是這么一臺(tái)電腦,一個(gè)程序就是這臺(tái)使用中的機(jī)箱。如何構(gòu)建這樣一臺(tái)可以使用的機(jī)箱?先做一個(gè)基礎(chǔ),或者可以稱(chēng)其為框架,就像主板。主板上有各種插槽,以實(shí)現(xiàn)其功能為目的的各種插槽。再往上面插上各種需要的模塊,通過(guò)電路或者導(dǎo)線或者其他什么的連接在一起,就可以使用。這樣做的一個(gè)顯而易見(jiàn)的好處就是:某一模塊壞了不必把整臺(tái)電腦都廢了換新的,顯卡壞了換顯卡,內(nèi)存壞了換內(nèi)存,僅此而90已。而且買(mǎi)電腦的時(shí)候選購(gòu)顯卡并不需要考慮內(nèi)存是怎么樣的,是什么樣的牌子或者型號(hào),只要考慮是否跟主板上的插槽對(duì)應(yīng)的起來(lái)就行(當(dāng)然有點(diǎn)絕對(duì),實(shí)際配電腦的時(shí)候還是很有講究的,這里只是一種理想情況,稍后會(huì)有說(shuō)明);待到買(mǎi)內(nèi)存的時(shí)候也只需要考慮是否能對(duì)應(yīng)得上內(nèi)存插槽。如果國(guó)際上有一個(gè)統(tǒng)一的規(guī)范和標(biāo)準(zhǔn)的話,全世界所有的廠商都可以盡情地生產(chǎn)通用的設(shè)備,而不需要定制,這也是電腦硬件發(fā)展如此迅速的主要原因之一。
扯遠(yuǎn)了,言歸正傳。以上的例子就是”高內(nèi)聚,低耦合“的體現(xiàn)——顯卡內(nèi)聚度極高,但是卻不與搭載在主板之上的其他設(shè)備相耦合,一切看起來(lái)是這么完美和令人興奮。但也可以看出來(lái),這條原則要求的是盡可能高的內(nèi)聚和盡可能低的耦合,絕對(duì)而純粹的內(nèi)聚是不存在的,沒(méi)有耦合也是不可能的。就好比買(mǎi)顯卡的時(shí)候總不能太過(guò)分,總應(yīng)該與其他外設(shè)處于同一水平層面,否則電腦將出現(xiàn)很多意想不到的情況。
關(guān)于依賴(lài)倒轉(zhuǎn),我理解的還很不足,至少應(yīng)用到實(shí)踐中還是十分生疏困難甚至于無(wú)從下手。依賴(lài)倒轉(zhuǎn)講究的是編程要面向接口依賴(lài)接口而不能依賴(lài)具體的實(shí)現(xiàn)和細(xì)節(jié)。關(guān)于這個(gè)概念我自己也有一個(gè)例子。比如說(shuō)金字塔,那么高的堆起來(lái),上面的石頭壓在下面的石頭上,可以比作上面的石頭緊密的依賴(lài)著下面的石頭。如果提出來(lái)要換一層的石頭,那么如果要換最底層的石頭的話,毫無(wú)疑問(wèn),整座金字塔都要拆了然后才能換;如果是要換最高層的石頭,直接換了就成,工作量差距之大顯而易見(jiàn)。我覺(jué)得軟件開(kāi)發(fā)就是堆疊金字塔,但是按本文開(kāi)頭所說(shuō)的”需求時(shí)刻在變化“這一觀點(diǎn)來(lái)看,如果不謹(jǐn)慎處理變化,很有可能就要面對(duì)拆了整座金字塔或者大部分金字塔的窘境了。為了避免這種慘劇,需要把最不容易變化的放在最下面,而最容易變化的放在最頂上,這樣皆大歡喜。而越是抽象的類(lèi)或?qū)ο螅渥兓目赡苄跃驮降汀_@也正是面向?qū)ο髤^(qū)別于面向過(guò)程的最顯著的特征,他們之間的差距也正是以這點(diǎn)最為顯著。
說(shuō)了很多,沒(méi)有一句談到二十三種模式中的任何一種,因?yàn)槲矣X(jué)得那是沒(méi)有必要的。我一直的思想也是種依賴(lài)倒轉(zhuǎn):把絕大多數(shù)精力花在最為本質(zhì)的概念和思想上,而把具體的實(shí)現(xiàn)方式和具象的存在放在稍微次要的位置。實(shí)際并不是考試,實(shí)踐中所有東西都是開(kāi)放的,沒(méi)必要死記硬背什么,但是那些思想,必須深深地印在腦海里,骨髓里,永遠(yuǎn)傳唱……
|
|