我理解这可以被解释为一个意见问题,但这是技术问题,我目前正在努力解决这个问题。
在Prism文档中,声明模块应该具有松散耦合,没有直接引用,只能通过共享接口。如下图所示:
我的问题是,如果只有少数模块需要IOrdersRepository
,那么基础设施就是错误的地方,因为它包含所有模块的共享代码。如果我将接口放在另一个模块中,那么两个模块都需要直接引用该模块,从而打破松耦合。
我应该简单地创建一个包含此接口且不遵循模块模式的库吗?
谢谢, 路加
答案 0 :(得分:5)
它应该是Infrastructure
模块。 Markus的论证是绝对正确的 - 你不应该为每个共享接口集创建单独的程序集。拥有许多接口的Infrastructure
模块更好,而不是很多模块,每个模块都有一些接口。想象一下,有一次你会发现,你的两个“接口集”应该使用一些共享接口!你会怎么做?为“超级共享”接口添加一个程序集?或者将这些模块合并为一个?我想是错的。
所以 - 绝对是Infrastructure
模块!
PS。想象一下,.NET Framework有1000个库 - 一个用于集合,另一个用于数学函数等....
<强>更新强>
实际上,我主要使用Infrastructure
模块用于接口和非常基本的DTO。所有共享代码我移动到另一个程序集(如YourApplication.UIControls
,YourApplication.DAL
等)。我没有足够的理由这样做,但这是我了解Prism的推荐的方法。恕我直言。
更新2:
如果你想分享你的服务如此广泛 - 我认为它绝对有结构,如:
YourApplication.Infrastructure
- “非常共享”的界面(例如IPaymentService
)YourApplication.Modules.PaymentModule
- “非常共享”的PaymentService实施YourApplication.WPF.Infrastucture
- 您的WPF应用程序的基础结构(除YourApplication.Infrastructure
YourApplication.WPF.Modules.PaymentUI
- 您的YourApplication.Modules.PaymentModule
YourApplication.WebSite.Modules.PaymentUI
- 网站用户界面等等..所以,你的模块几乎总是会引用YourApplication.Infrastructure
和YourApplication.TYPEOFAPP.Infrastructure
,其中TYPEOFAPP
可以是WPF,WebSite,WinService等。或者你可以命名它像YourApplication.Modules.PaymentUI.WPF
..