構(gòu)件設(shè)計原則(參考)
資源天下 2012/12/16 16:49:24
構(gòu)件的粒度和對外接口的設(shè)計決定了構(gòu)件的可復(fù)用和松耦合特性。粒度過大,靈活性小,難以實現(xiàn)復(fù)用,粒度過小,管理成本提升,使得復(fù)用性也很難改善;接口和實現(xiàn)的分離,保證各項業(yè)務(wù)構(gòu)件在提供標(biāo)準(zhǔn)化的服務(wù)接口的前提下可以替換各種可選的實現(xiàn),而不會影響系統(tǒng)其它部分的實現(xiàn),接口設(shè)計不當(dāng),對于構(gòu)件的耦合會有很大的影響。
構(gòu)件的粒度
構(gòu)件的粒度根據(jù)需要可以不同,既可能是獨立運行的子系統(tǒng),也可能是程序模塊。構(gòu)件是提高應(yīng)用系統(tǒng)靈活性和復(fù)用的重要基礎(chǔ)。構(gòu)件粒度太小,造成構(gòu)件數(shù)量多,構(gòu)件之間交互多,管理困難,性能低下;構(gòu)件粒度粗,功能復(fù)雜,功能之間關(guān)系緊密,升級困難(可以獨立升級往往會作為確定一個構(gòu)件范圍的重要因素),很難實現(xiàn)重用。因此找到一個合適的構(gòu)件粒度是很重要的事情。
構(gòu)件定義是這樣推出來,我們把整個企業(yè)的所有軟件稱之為系統(tǒng),即一個企業(yè)只有一個系統(tǒng);系統(tǒng)下面劃分成若干應(yīng)用,每個應(yīng)用完成一個相對獨立的業(yè)務(wù)功能,比如財務(wù)管理、人力資源管理等,一般來說是一個廠商獨立完成(后文還會提到,如果是基于一個業(yè)務(wù)基礎(chǔ)平臺,多個廠商可以在一個應(yīng)用中);應(yīng)用下面劃分成若干業(yè)務(wù)組件,業(yè)務(wù)組件是相對獨立的功能,其可以進一步劃分成若干模塊,從而形成了系統(tǒng)-應(yīng)用-業(yè)務(wù)組件-模塊這樣四個層次的模型。根據(jù) SCA 的定義,模塊下面可以進一步劃分成程序集為更小的粒度。從軟件復(fù)用角度來看,業(yè)務(wù)組件是獨立部署的最小顆粒,模塊是復(fù)用的最小顆粒。
除了業(yè)務(wù)組件需要粒度控制外,Web 服務(wù)的粒度控制也是一項十分重要的設(shè)計任務(wù)。通常來說 , 對于將暴露在整個系統(tǒng)外部的服務(wù)推薦使用粗粒度的接口 , 而相對較細(xì)粒度的服務(wù)接口通常用于企業(yè)和機構(gòu)系統(tǒng)架構(gòu)的內(nèi)部。從技術(shù)上講 , 粗粒度的服務(wù)接口可能是一個特定服務(wù)的完整執(zhí)行 , 而細(xì)粒度的服務(wù)接口可能是實現(xiàn)這個粗粒度服務(wù)接口的具體的內(nèi)部操作。雖然細(xì)粒度的接口能為服務(wù)請求者提供了更加細(xì)化和更多的靈活性 , 但同時也意味著引入較難控制的交互模式易變性 , 也就是說服務(wù)的交互模式可能隨著不同的服務(wù)請求者而不同。如果暴露這些易于變化的服務(wù)接口給系統(tǒng)的外部用戶 , 就可能造成外部服務(wù)請求者難于支持不斷變化的服務(wù)提供者所暴露的細(xì)粒度服務(wù)接口。而粗粒度服務(wù)接口保證了服務(wù)請求者將以一致的方式使用系統(tǒng)中所暴露出的服務(wù)。
構(gòu)件的松耦合設(shè)計
耦合性是程序結(jié)構(gòu)中各個模塊之間相互關(guān)聯(lián)的度量,它取決于各個模塊之間接口的復(fù)雜程度、調(diào)用模塊的方式以及哪些信息通過接口。耦合性由松到緊可以分成以下幾種:非直接耦合、數(shù)據(jù)耦合、標(biāo)記耦合、控制耦合、外部耦合、公共耦合、內(nèi)容耦合。非直接耦合是指兩個模塊之間沒有直接關(guān)系,這種耦合的模塊獨立性最強。數(shù)據(jù)耦合,彼此之間是通過數(shù)據(jù)參數(shù) ( 不是控制參數(shù)、公共數(shù)據(jù)結(jié)構(gòu)或外部變量 ) 來交換輸入、輸出信息的,模塊之間的獨立性比較強。標(biāo)記耦合是指一組模塊通過參數(shù)表傳遞記錄信息,就是標(biāo)記耦合,這要求這些模塊都必須清楚該記錄的結(jié)構(gòu),并按結(jié)構(gòu)要求對此記錄進行操作,應(yīng)盡量避免這種耦合,它使在數(shù)據(jù)結(jié)構(gòu)上的操作復(fù)雜化了。在構(gòu)件設(shè)計模型中構(gòu)件之間盡量實現(xiàn)非直接耦合(總線模式,推薦使用)和數(shù)據(jù)耦合(共享庫模式,控制使用),通過定義清晰的 Web 服務(wù)進行交互,構(gòu)件內(nèi)部的模塊之間可以通過標(biāo)準(zhǔn)化的 Web 服務(wù)或者數(shù)據(jù)表來進行共享。
|