Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Prism中的共享接口应该放在哪里?_C#_Prism - Fatal编程技术网

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

C# Prism中的共享接口应该放在哪里?,c#,prism,C#,Prism,我理解这可能被解释为一个意见问题,但这是一个技术问题,也是我目前正在努力解决的一个问题 Prism文档中指出,模块应具有松散耦合,无直接引用,仅通过共享接口。如下图所示: 我的问题是,如果只有少数模块需要一个IOrdersRepository,那么基础结构就不适合它,因为它包含所有模块的共享代码。如果我将接口放在另一个模块中,那么两个模块都需要直接引用该模块,从而打破松散耦合 我是否应该简单地创建一个包含此接口的库,而不遵循模块模式 谢谢, Luke它肯定应该是基础设施模块。Markus的论点

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

Prism文档中指出,模块应具有松散耦合,无直接引用,仅通过共享接口。如下图所示:

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

我是否应该简单地创建一个包含此接口的库,而不遵循模块模式

谢谢,
Luke

它肯定应该是
基础设施
模块。Markus的论点完全正确——您不应该为每个共享接口集创建单独的程序集。更好的做法是让
基础设施
模块有很多接口,而不是让很多模块在每个模块中都有一些接口。想象一下,有一次你会发现,你的两个“接口集”应该使用一些共享接口!你会怎么做?为“超级共享”接口添加一个程序集?还是将这些模块合并为一个?我认为这是错误的

所以-绝对是
基础设施
模块

想象一下,.NETFramework有1000个库——一个用于集合,另一个用于数学函数等等

更新:

实际上,我使用
基础设施
模块主要用于接口和非常基本的DTO。我将所有共享代码移动到另一个程序集(如
YourApplication.UIControls
YourApplication.DAL
等)。我没有足够的理由这样做,但这是我理解Prism建议的方式。我就是

更新2:

如果您想广泛分享您的服务,我认为采用以下结构绝对有意义:

  • YourApplication.Infrastructure
    -“非常共享”的界面(如
    IPaymentService
  • YourApplication.Modules.PaymentModule
    -“非常共享”的PaymentService实现
  • YourApplication.WPF.infrastructure
    -WPF应用程序的基础结构(除了
    YourApplication.infrastructure
  • YourApplication.WPF.Modules.PaymentUI
    -一些特定于WPF的UI,用于
    YourApplication.Modules.PaymentModule
  • YourApplication.WebSite.Modules.PaymentUI
    -网站用户界面

等等..所以,你的模块几乎总是引用
YourApplication.Infrastructure
YourApplication.TYPEOFAPP.Infrastructure
,其中
TYPEOFAPP
可以是WPF、网站、WinService等..或者你可以将其命名为
YourApplication.modules.PaymentUI.WPF

那么你的计划是什么呢?创建每次接口不是由“所有模块”共享时,都会有一个单独的程序集?我把它放在基础设施中,因为这是所有模块都可能共享的代码。我想为每个共享的接口集(例如,处理订单的所有接口)创建一个单独的程序集.但是你说的有道理,我只是担心基础设施项目会有很多大多数模块都不需要的接口。在@chopikadze的回答之后,我想知道如果我想在另一个应用程序中重复使用一些服务,这个解决方案会如何工作?一个单独的接口组装和实现的方法例如,ATION模块意味着这些服务可以在网站上使用。@Lukazoid:对不起,但我实际上不理解你的最后一个问题。在“在另一个应用程序中重复使用某些服务”下,你是什么意思?@chopikadze如果我有一个服务,
IPaymentService
方法
作废支付供应商()
。我可能希望在WPF应用程序中使用此服务,如此处所示,但我可能希望在每晚运行的windows服务中或通过web界面使用此服务。该服务在所有三种情况下都应执行完全相同的例行程序,但是,通过将界面放置在
基础结构中,我认为他将服务添加到WPF应用程序中。感谢您的回答,您所说的大量程序集听起来是正确的,而且它将变得不可管理。我关心的是,将服务接口放置在
基础设施项目中会使在其他项目中重复使用服务成为一场噩梦(例如网站),因为所有的服务实现都会引用到
基础设施
。这就是我关于为接口提供共享程序集和为实现提供程序集/模块的想法的来源。感谢第二次更新,这似乎正是我所需要的。允许服务重用,同时仍然提供rism模块化方法。谢谢:)