Prism中的共享接口应该放在哪里?

时间:2012-01-20 10:55:37

标签: c# prism

我理解这可以被解释为一个意见问题,但这是技术问题,我目前正在努力解决这个问题。

在Prism文档中,声明模块应该具有松散耦合,没有直接引用,只能通过共享接口。如下图所示:

Module dependencies

我的问题是,如果只有少数模块需要IOrdersRepository,那么基础设施就是错误的地方,因为它包含所有模块的共享代码。如果我将接口放在另一个模块中,那么两个模块都需要直接引用该模块,从而打破松耦合。

我应该简单地创建一个包含此接口且不遵循模块模式的库吗?

谢谢, 路加

1 个答案:

答案 0 :(得分:5)

它应该是Infrastructure模块。 Markus的论证是绝对正确的 - 你不应该为每个共享接口集创建单独的程序集。拥有许多接口的Infrastructure模块更好,而不是很多模块,每个模块都有一些接口。想象一下,有一次你会发现,你的两个“接口集”应该使用一些共享接口!你会怎么做?为“超级共享”接口添加一个程序集?或者将这些模块合并为一个?我想是错的。

所以 - 绝对是Infrastructure模块!

PS。想象一下,.NET Framework有1000个库 - 一个用于集合,另一个用于数学函数等....

<强>更新

实际上,我主要使用Infrastructure模块用于接口和非常基本的DTO。所有共享代码我移动到另一个程序集(如YourApplication.UIControlsYourApplication.DAL等)。我没有足够的理由这样做,但这是我了解Prism的推荐的方法。恕我直言。

更新2:

如果你想分享你的服务如此广泛 - 我认为它绝对有结构,如:

  • YourApplication.Infrastructure - “非常共享”的界面(例如IPaymentService
  • YourApplication.Modules.PaymentModule - “非常共享”的PaymentService实施
  • YourApplication.WPF.Infrastucture - 您的WPF应用程序的基础结构(除YourApplication.Infrastructure
  • 之外)
  • YourApplication.WPF.Modules.PaymentUI - 您的YourApplication.Modules.PaymentModule
  • 的一些WPF特定用户界面
  • YourApplication.WebSite.Modules.PaymentUI - 网站用户界面

等等..所以,你的模块几乎总是会引用YourApplication.InfrastructureYourApplication.TYPEOFAPP.Infrastructure,其中TYPEOFAPP可以是WPF,WebSite,WinService等。或者你可以命名它像YourApplication.Modules.PaymentUI.WPF ..