關(guān)于面向構(gòu)件和EOS的一些思考
二、軟件開發(fā)和傳統(tǒng)行業(yè)應(yīng)該怎么對比
普元很喜歡把軟件開發(fā)同傳統(tǒng)產(chǎn)業(yè)進(jìn)行類比,在接口問題上,我們也來看看傳統(tǒng)的機(jī)械產(chǎn)業(yè)有沒有類似的概念吧。螺絲和螺帽是我們最常見的兩種構(gòu)件,也是大規(guī)模工業(yè)化生產(chǎn)機(jī)械裝置的基礎(chǔ),那么螺絲和螺帽的接口是不是寬松和自適應(yīng)的呢?不是!他們是強(qiáng)耦合的接口,而且我們有上百萬中不同規(guī)格的螺紋規(guī)格,或者說接口,每一種都定義的非常精確和有針對性。我們還有不計(jì)其數(shù)的齒輪的規(guī)格,有多少個(gè)齒輪可以用其他型號的代替呢?很少。當(dāng)然機(jī)械裝置中也有弱耦合,比如膠水、塑料、樹脂。但是有沒有利用弱耦合的結(jié)構(gòu)來大規(guī)模生產(chǎn)機(jī)械裝置的呢?我一時(shí)間想不出這樣的例子。
類比得出的結(jié)論是,如果我們要學(xué)習(xí)傳統(tǒng)的機(jī)械產(chǎn)業(yè),我們應(yīng)該定制上百萬種嚴(yán)格的強(qiáng)耦合接口標(biāo)準(zhǔn),然后大量的廠商按照標(biāo)準(zhǔn)生產(chǎn)上百萬種構(gòu)件??雌饋砗孟駱?gòu)件時(shí)代離我們還有點(diǎn)遙遠(yuǎn)哦。不過也未必,類比得出的另一個(gè)結(jié)果是,用EOS這樣松耦合的構(gòu)件來構(gòu)造軟件,就象用萬能膠水粘到一起的一組齒輪、軸承和螺絲螺帽來做變速箱。
我們不要理所當(dāng)然的認(rèn)為這樣的變速箱沒有用,這正是軟件和機(jī)械的不同。這樣一個(gè)變速箱只要設(shè)計(jì)合理、能夠承載所需要的負(fù)荷,他是真的能夠一直工作下去的,我們不需要面對金屬疲勞、膠水老化和磨損這樣的問題。也許這正是面向構(gòu)件開發(fā)的實(shí)質(zhì)吧:能用膠水粘到一起的東西,就不要用螺絲。
是的,我的類比存在問題。再寫上面這些文字的時(shí)候我腦子里面反復(fù)想起Jack Reecves的名言:源碼就是設(shè)計(jì),而軟件的生產(chǎn)過程僅僅是廉價(jià)得幾乎免費(fèi)的構(gòu)建過程。不錯,我們可以機(jī)械化、自動化的生產(chǎn)大批的汽車、冰箱,可是我們還可以更容易的構(gòu)建軟件的拷貝。我們在抱怨軟件的生產(chǎn)不能象汽車那樣一臺接一臺的出廠,可是汽車廠又何嘗能夠一臺接一臺的批量設(shè)計(jì)汽車呢?
昨晚碼字之前喝了點(diǎn)紅酒,思路好像不是太清晰,有點(diǎn)自相矛盾的傾向… …