2012-01-20 63 views
2

我明白這可能會被解釋爲一個意見問題,但它是技術和我目前正在努力解決的問題。Prism中的共享接口應該放在哪裏?

在Prism文檔中,聲明模塊應該有沒有直接引用的鬆散耦合,只能通過共享接口。像下面的圖片:

Module dependencies

我的問題是,如果只有幾個模塊所需的IOrdersRepository,基礎設施是它的錯了地方,因爲這包含了所有的模塊共享代碼。如果我將接口放置在另一個模塊中,則兩個模塊都需要直接引用該接口,從而打破鬆耦合。

我應該簡單地創建一個包含此接口並且不遵循模塊模式的庫嗎?

感謝, 盧克

+1

有啥打算?每次當一個接口不被「所有模塊」共享時,創建一個獨立的程序集?我將它放在基礎結構中,因爲這是所有模塊共享的代碼 –

+0

我正在考慮爲每個共享的一組接口(例如處理訂單的所有接口)創建一個單獨的程序集。但是你所說的話是有道理的,我只關心基礎設施項目將充滿大多數模塊不需要的接口。 – Lukazoid

+0

@ chopikadze的回答之後,我想知道如果我想要在其他應用程序中重新使用某些服務,該解決方案將如何工作?例如,單獨的接口程序集和實現模塊的方法意味着該服務可以在網站上使用。 – Lukazoid

回答

5

它應該是絕對Infrastructure模塊。 Markus的觀點是完全正確的 - 你不應該爲每個共享的接口集創建單獨的程序集。具有很多接口的Infrastructure模塊更適合每個模塊都帶有一些接口的模塊。想象一下,有一次你會發現,你的2個「接口集」應該使用一些共享接口!你會怎麼做?爲這個「超級共享」接口添加一個程序集?或者將這些模塊組合到一個?我想是錯的。

所以 - 絕對Infrastructure模塊!

PS。試想一下,即.NET框架有1000個圖書館 - 一個用於收藏,anotherone數學函數等....

UPDATE:

其實,我用Infrastructure模塊主要用於界面和非常基本的DTO。全部分享代碼我搬到另一個程序集(如YourApplication.UIControlsYourApplication.DAL等)。我沒有足夠的理由這樣做,但這是我理解Prism的建議的方法。只是恕我直言。

更新2:

如果你想這麼寬分享您服務 - 我認爲這絕對讓SENCE有結構,如:

  • YourApplication.Infrastructure - 「非常共享」接口(如IPaymentService
  • YourApplication.Modules.PaymentModule - 「非常共享」 實現你的PaymentService
  • YourApplication.WPF.Infrastucture的 - 基礎設施您WPF應用程序(除了YourApplication.Infrastructure
  • YourApplication.WPF.Modules.PaymentUI - 一些WPF UI特有您YourApplication.Modules.PaymentModule
  • YourApplication.WebSite.Modules.PaymentUI - UI爲Web站點

等等..所以,你的模塊將擁有幾乎總是YourApplication.InfrastructureYourApplication.TYPEOFAPP.Infrastructure,引用其中TYPEOFAPP可以WPF,網站,WINSERVICE等。或者你也可以像YourApplication.Modules.PaymentUI.WPF命名..

+0

感謝您的回答,您對組件羣衆的看法聽起來不錯,而且會變得難以管理。我將服務接口放置在'Infrastructure'項目中的擔心是,它會使其他項目中的服務重用爲噩夢(例如網站),因爲所有的服務實現都會引用「基礎結構」。這是我爲接口創建共享程序集的想法,以及實現的程序集/模塊。 – Lukazoid

+0

感謝您的第二次更新,似乎正是我需要的那種東西。允許服務重新使用,同時仍然提供棱鏡模塊化方法。謝謝:) – Lukazoid

+0

+1同意(男人,爲什麼有最低評論長度???) –