系統架構設計 避免迴圈引用

2021-04-13 13:09:09 字數 884 閱讀 6984

今天有同事問這個問題,記得以前也曾遇到過類似問題,特記錄下來,免得再次忘記。

下面這個系統結構圖,恐怕大家都很熟悉。

這種結構非常簡單,而且其好處十分明顯:

1. 架構設計師完成設計後,使用工具直接生成facade library框架,將介面和類庫開發進行分離。由於完全基於介面和外觀模式,使得介面和類庫之間的耦合降到最低。

2. 介面程式設計師可以直接使用資料模擬類來進行開發,而無需等待類庫(concerte library)開發完成。

3. 類庫可以靈活公升級,甚至提供多個版本,而ui無需做任何修改。

好處是不少,可是這個設計存在幾個問題:

1. facade.newtest() 需要引用concerte library類庫才能生成concertetest例項,而concertetest又必須引用facade library類庫才能繼承test類或實現itest介面。顯然這種迴圈引用(見下圖)會造成無法編譯。解決方法只能是將facade library和concerte library合併成乙個類庫,這會造成設計框架和實現框架無法分離,為系統後續設計和開發帶來潛在麻煩。

2. 即便某種語言可以忽略迴圈引用的問題,concerte library的修改也可能需要重新編譯facade library,對於乙個龐大系統來說,這並不是個好主意。

為了解決這些問題,我們將這個結構拆借,分離成如下樣式的結構。

我們將facade library中的介面和抽象類分離出來,形成乙個單獨的inte***ce library。如此分解以後,迴圈引用的問題被解決(見下圖),而且concerte library的變化也只需重新編譯facade library,由於該類庫非常簡單(可能只有facade類),因此也避免了上面提到的編譯問題。在不破壞設計框架和實現框架分類的前提下,稍微的複雜度顯然能給我們帶來更多的好處。

軟體架構設計 二 系統總體架構設計

系統總體架構非常重要,但在表達上都不盡相同,下面介紹幾種常用的系統架構模式,供參考 assf access service biz standard fundation 模式 訪問 服務 業務功能 標準 基礎,對系統架構各個層次均有表達,但部署應用模式需要有單獨說明,如下圖方式組織系統總體架構 lo...

軟體架構設計 二 系統總體架構設計

系統總體架構非常重要,但在表達上都不盡相同,下面介紹幾種常用的系統架構模式,供參考 assf access service biz standard fundation 模式 訪問 服務 業務功能 標準 基礎,對系統架構各個層次均有表達,但部署應用模式需要有單獨說明,如下圖方式組織系統總體架構 lo...

軟體架構設計 二 系統總體架構設計

系統總體架構非常重要,但在表達上都不盡相同,下面介紹幾種常用的系統架構模式,供參考 assf access service biz standard fundation 模式 訪問 服務 業務功能 標準 基礎,對系統架構各個層次均有表達,但部署應用模式需要有單獨說明,如下圖方式組織系統總體架構 lo...