2016-11-27 83 views
0

我已經開發了一個WPF應用程序,使用了PrismUnity框架,我對以下內容有一些擔憂,無論我是否已正確實施它們。如何使用棱鏡和Unity實現真正的鬆耦合

  • 抽象類/接口 - 我已經在一個程序集中的所有層次構成接口,然後引用它在各個圖書館實施。現在,引用的庫可以訪問其他層的所有非必需接口。對於例如服務層可以訪問UI接口。這是clear separation的正確實施,還是應該將其拆分爲多個部件。

  • 查看模型依賴關係 - 我主要使用EventAggregator在視圖模型之間進行通信。在某些情況下,我直接在構造函數中傳遞其他視圖模型的實例,並使用DI容器解析它。我想通過引入界面來實現清晰分離,省略直接視圖模型依賴關係。如何將視圖模型的接口組織爲獨立的程序集,以便其他開發人員可以理解。爲了避免創建多個UI項目,我只創建了一個程序集並將它們邏輯分隔到文件夾中。

  • 摘要模塊類 - 代替在bootstrapper.cs文件中指定的所有依賴關係的,我分解它們各自模塊中。我的大部分lib庫項目都提到了Prism庫。因此,UI特定的名稱空間被添加到非UI相關項目中。有沒有更好的方法來實現這一目標?

回答

1

抽象類/接口

我會去的一樣多「界面組件」在必要時,有太多的傷害。例如:如果需要以防止第1層與第3層進行潛在的通信,請將第1層到第2層的接口放在一個組件中,而將第2層到第3層的接口放在另一個組件中。

視圖模型依賴

通常情況下,你應該不需要繞過所有視圖模型。傳遞數據(a.k.a.模型)時,視圖模型本身並不包含任何其他地方不可用或對任何人都有價值的數據,除了綁定到視圖模型的視圖。

摘要模塊類

棱鏡應用引用棱鏡 ...還等什麼?只要IModule實現收到IUnityContainer我根本不在乎。如果有人需要發佈活動,他會得到IEventAggregator ......這已經是一個接口了,你可以在測試中注入模擬,所以不需要進一步的抽象。

+0

非常感謝。如果我可以問,請幫助我進一步理解以下幾點。 **抽象模塊類** - 是否是一個好主意,實現一個邏輯來顯示/隱藏視圖基於某些事件爲各自的UI模塊。對於例如如果沒有連接,我想隱藏所有模塊並顯示錯誤屏幕。目前,我有一個單獨的'ViewManager',它在一個地方卸載所有的視圖。我想在每個「UI」模塊中改變這種邏輯,但我對發佈如此多的通知持懷疑態度。 –

+0

如果這是一個影響所有模塊的事件,我會對它作出集中反應。您可以在覆蓋整個外殼的外殼中添加一個區域,通常爲空。直到連接丟失,然後將該區域導航到隱藏整個應用程序的錯誤屏幕。這樣,您只需對連接丟失做出一次反應,並確定該UI已禁用。 – Haukinger