|
間接在分層架構(gòu)中體現(xiàn)尤為明顯,引入層實(shí)則就是引入間接性。利用間接對變化進(jìn)行隔離,使得變化只能影響一層。例如在領(lǐng)域?qū)优c數(shù)據(jù)庫之間引入數(shù)據(jù)訪問層,就可以隔絕因?yàn)閿?shù)據(jù)庫發(fā)生的變化對領(lǐng)域帶來的影響。
在分層架構(gòu)中,我們應(yīng)盡量保證在某一層中所有用到的組件都工作在同一個抽象層中,這意味著需要謹(jǐn)慎處理對象之間的協(xié)作,盡量避免跨層之間的調(diào)用。如果不同的層部署在不同的服務(wù)器,就會帶來不必要的消息處理,增加了網(wǎng)絡(luò)跳數(shù)與帶寬占用。拋開性能不談,跨層調(diào)用產(chǎn)生的依賴,可能破壞層的內(nèi)聚性。倘若必須依賴于底層,我們也應(yīng)該減少對底層的依賴點(diǎn)。要減少這種依賴,可以在同一層中提供一個間接接口,用于處理對底層的依賴關(guān)系,從而將變化集中于一處。
對于模塊和組件中的對象協(xié)作,同樣遵循這一原則。假設(shè)系統(tǒng)定義了報表引擎組件,它需要調(diào)用數(shù)據(jù)引擎組件提供的服務(wù),驅(qū)動引擎執(zhí)行數(shù)據(jù)庫查詢,以獲得報表所必須的數(shù)據(jù)。一般采用的設(shè)計(jì)如下圖所示: 這樣的設(shè)計(jì)充分體現(xiàn)了抽象的原則,保證了ReportEngine與DataEngine組件之間的松散耦合。在ReportEngine組件中,與報表相關(guān)的許多領(lǐng)域?qū)ο蠖夹枰{(diào)用DataEngineService,以獲得報表所需要的數(shù)據(jù)。然而,我在設(shè)計(jì)時并未滿足于DataEngineService接口引入的間接,而是在ReportEngine組件中再度引入了一層間接,我將其定義為DataEngineRepository,它屬于報表引擎的領(lǐng)域范圍:
public interface DataEngineRepository {
public List<Map<String, Object>> find(
CommandInfoPreparing commandInfoPreparing);
}
it知識庫:引入間接隔離變化(三),轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。