2

我有N個應用程序。每個應用程序至少包括以下組件:是組裝循環依賴設計中的一個錯誤

  • BusinessLogic
  • 數據訪問

在某些情況下應用1只需要調用從應用2和應用程序2需要BusinessLogic層的方法來調用的方法businessLogic應用程序層1.此情況導致應用程序1和應用程序2的businessLogic層之間的程序集循環依賴關係。我知道它可能會導致構建過程中出現一些問題。現在我的問題是:「在建築設計中是否是一個錯誤?如果是,如何解決?」

回答

0

如果應用2必須調用應用1的業務邏輯層,這應該是你到循環依賴之前以及紅旗(因爲APP1真的,現在業務邏輯和應用2)。

一個共同的解決方案,這是完全抽象的OOP語言的基類時,你會怎麼做。在這種情況下,找到共享的片段並將它們從單個「應用」下移出,然後放入可輕鬆共享的庫中。

在你的情況,我會把自己的業務邏輯操作是股並把它們放在自己的組件的命名恰當地這樣既可以消費它沒有問題。

0

,簡單地告訴你,你可能要重新設計你的系統。我總是會避免循環依賴,因爲你在混合責任,它會在以後引發各種問題。

繪製你的組件和關係,並把他們每個人在他們指定的層。洋蔥架構是設計您的系統和識別所有資產,責任和它們之間關係的好方法。閱讀herehere

在你的情況,你需要所使用的客戶端和包含共享的東西的成分。但根據你給我們的信息,不可能猜到如何。

0

可能有2個組件相互依賴(例如System.dllSystem.Configuration.dll在.NET Fx中彼此依賴)。但正如你可能經歷過的那樣,你必須努力對付Visual Studio強制措施才能避免這種情況。

很明顯非循環程序集之間的依賴關係是一個目標,你需要必須實現。否則,您的程序集不能獨立開發,編譯和測試。

通用範例是BusinessLogic使用DataAccess而不是相反。如果你想DataAccess能夠再打BusinessLogic這樣做的通常的方法是:

  • 定義回調接口DataAccess裝配
  • BusinessLogic組件(因此BusinessLogic集的引用實現這個調用背部接口DataAccess組件,但是反之則不行)
  • 通行證的一個或實現此接口,從BusinessLogicDataAccess,通過在DataAccess所定義的方法的幾個對象,需要一個回調接口PARAMET呃。

具有DataAccess能夠再打BusinessLogic是不被禁止的事情,但你應該問自己,爲什麼你要做到這一點,你應該嘗試將這些號碼回調的限制嚴格的最小。


就個人而言,我喜歡的考慮組件的命名空間的組件走得更遠,具有非週期性的命名空間的依賴,並避免使用匯編神器來定義組件。這在我撰寫的兩本白皮書中已經公開,可用here