[導(dǎo)入]軟件建模的困境:總是貧血的
Posted on 2005-11-16 20:10 canonical 閱讀(605) 評(píng)論(1) 編輯 收藏 所屬分類(lèi): 設(shè)計(jì)理論
軟件世界與真實(shí)的,物理的世界有著本質(zhì)的不同,其中一點(diǎn)在于軟件中的規(guī)則是根據(jù)需求制訂的而不是先驗(yàn)的。我們?cè)谘芯课锢硎澜绲臅r(shí)候,多少會(huì)有些唯物主義,
即紛繁蕪雜的表象下蘊(yùn)含著自恰的,不變的規(guī)律。物理學(xué)的建模是多方位的,多層次的。同一個(gè)規(guī)律,在不同的簡(jiǎn)化條件和不同的環(huán)境中我們會(huì)賦予它不同的名字。
在不同的抽象層面上,我們也可能會(huì)建立不同的模型。嚴(yán)格的說(shuō)起來(lái),這些模型之間可能存在著不一致性,但我們相信,存在著一個(gè)絕對(duì)精確的模型:無(wú)限的細(xì)節(jié),
無(wú)限的關(guān)聯(lián),完美的,自恰的,而我們所建立的所有物理模型都只是對(duì)該終極模型在某個(gè)層次,某個(gè)角度上的近似抽象,而每一個(gè)模型都有著自己的適用范圍。很多
時(shí)候物理學(xué)的建模是粗魯?shù)?,拋棄了大量似乎必須的要素,只因?yàn)槲锢韺W(xué)家相信物理學(xué)的直覺(jué)能夠?qū)⑽覀円龑?dǎo)到正確的道路,不論我們做出什么樣的簡(jiǎn)化和假設(shè),只
要它是物理的,最終都會(huì)回歸到真實(shí)的世界。
軟件是人為構(gòu)造出來(lái)的,其體現(xiàn)的運(yùn)行規(guī)律由外部需求所決定,而無(wú)法形成自我的證明。領(lǐng)域模型(Domain Model)隱喻式的期望能夠建立穩(wěn)定的邏輯層,可這注定是困難的。我們?cè)谲浖O(shè)計(jì)中希望分層,職責(zé)單一,進(jìn)行正交化設(shè)計(jì)。可是一個(gè)復(fù)雜系統(tǒng)的邏輯分解注 定是無(wú)法正交化的。非此即彼只存在于抽象的世界。多個(gè)復(fù)雜性層次上的結(jié)構(gòu)交織在一起,使得我們難以建立穩(wěn)定的根基。因?yàn)槿狈ο闰?yàn)的支配規(guī)則,我們鼓吹需求 到實(shí)現(xiàn)的1:1映射,實(shí)際上只是希望通過(guò)貧乏的唯一性來(lái)維護(hù)演變中的自恰性。真正實(shí)現(xiàn)了1:1映射是不是在系統(tǒng)中引入了人為的剛性? 在一定的情景下,為了達(dá)到最適的模型,我們需要各種Facade,我們需要1:n映射,抑或是m:n映射。被割裂了的聯(lián)系仍然需要通過(guò)各種service 在系統(tǒng)中重建出來(lái)。
在建筑學(xué)的隱喻中,建筑設(shè)計(jì)師與建筑工人之間還存在著一個(gè)角色:土木工程師。他在物理結(jié)構(gòu)的層面上而不是應(yīng)用意義上把握整體 工程。在結(jié)構(gòu)層次上我們是能夠進(jìn)行有效的推理和判斷的。在軟件中也是一樣,拋去對(duì)象的業(yè)務(wù)含義,我們可以把它理解為一個(gè)Map,那對(duì)它可以進(jìn)行那些操作是 可以預(yù)知的。只是我們對(duì)于軟件結(jié)構(gòu)層面的了解還是太膚淺了。每個(gè)項(xiàng)目,大量的時(shí)間花費(fèi)在編寫(xiě)那些低層的與業(yè)務(wù)無(wú)關(guān)的模塊(或者說(shuō)可以抽象出這些模塊),這 就如同每次建筑,都從制造磚塊開(kāi)始一樣。材料的準(zhǔn)備不是一朝一夕之功。在結(jié)構(gòu)層上我們必須對(duì)系統(tǒng)形成深刻的理解,這不僅僅是業(yè)務(wù)建模的問(wèn)題。
軟件是人為構(gòu)造出來(lái)的,其體現(xiàn)的運(yùn)行規(guī)律由外部需求所決定,而無(wú)法形成自我的證明。領(lǐng)域模型(Domain Model)隱喻式的期望能夠建立穩(wěn)定的邏輯層,可這注定是困難的。我們?cè)谲浖O(shè)計(jì)中希望分層,職責(zé)單一,進(jìn)行正交化設(shè)計(jì)。可是一個(gè)復(fù)雜系統(tǒng)的邏輯分解注 定是無(wú)法正交化的。非此即彼只存在于抽象的世界。多個(gè)復(fù)雜性層次上的結(jié)構(gòu)交織在一起,使得我們難以建立穩(wěn)定的根基。因?yàn)槿狈ο闰?yàn)的支配規(guī)則,我們鼓吹需求 到實(shí)現(xiàn)的1:1映射,實(shí)際上只是希望通過(guò)貧乏的唯一性來(lái)維護(hù)演變中的自恰性。真正實(shí)現(xiàn)了1:1映射是不是在系統(tǒng)中引入了人為的剛性? 在一定的情景下,為了達(dá)到最適的模型,我們需要各種Facade,我們需要1:n映射,抑或是m:n映射。被割裂了的聯(lián)系仍然需要通過(guò)各種service 在系統(tǒng)中重建出來(lái)。
在建筑學(xué)的隱喻中,建筑設(shè)計(jì)師與建筑工人之間還存在著一個(gè)角色:土木工程師。他在物理結(jié)構(gòu)的層面上而不是應(yīng)用意義上把握整體 工程。在結(jié)構(gòu)層次上我們是能夠進(jìn)行有效的推理和判斷的。在軟件中也是一樣,拋去對(duì)象的業(yè)務(wù)含義,我們可以把它理解為一個(gè)Map,那對(duì)它可以進(jìn)行那些操作是 可以預(yù)知的。只是我們對(duì)于軟件結(jié)構(gòu)層面的了解還是太膚淺了。每個(gè)項(xiàng)目,大量的時(shí)間花費(fèi)在編寫(xiě)那些低層的與業(yè)務(wù)無(wú)關(guān)的模塊(或者說(shuō)可以抽象出這些模塊),這 就如同每次建筑,都從制造磚塊開(kāi)始一樣。材料的準(zhǔn)備不是一朝一夕之功。在結(jié)構(gòu)層上我們必須對(duì)系統(tǒng)形成深刻的理解,這不僅僅是業(yè)務(wù)建模的問(wèn)題。