如何使用Prism和Unity实现真正的松散耦合

时间:2016-11-27 08:52:49

标签: wpf mvvm unity-container prism loose-coupling

我使用PrismUnity框架开发了一个WPF应用程序,我对以下是否正确实现它们有一些担忧。

  • 抽象类/接口 - 我为一个程序集中的所有层组织了接口,然后在相应的库中引用它以进行实现。现在,引用的库可以访问其他层的所有非必需接口。对于例如服务层可以访问UI接口。这是clear separation方面的正确实现,还是应该将其拆分为多个程序集。

  • 查看模型依赖关系 - 我主要使用EventAggregator来在视图模型之间进行通信。在某些情况下,我直接在构造函数中传递其他视图模型的实例,并使用DI容器解析它。我想通过引入接口来实现明确的分离,从而省略直接视图模型依赖性。如何以其他开发人员可以理解的方式将视图模型的界面组织到单独的程序集中。为了避免创建多个UI项目,我只创建了一个程序集,并在逻辑上将它们分成文件夹。

  • 抽象模块类 - 我没有在bootstrapper.cs文件中指定所有依赖项,而是将它们分别考虑在各自的模块中。我的大多数类lib项目都引用了Prism库。因此,UI特定名称空间被添加到非UI相关项目中。有没有更好的方法来实现这一目标?

1 个答案:

答案 0 :(得分:1)

  

抽象类/接口

我会尽可能多地使用"界面装配"必要时,有太多的伤害。示例:如果您需要以防止第1层与第3层进行潜在通信,请将1层到第2层接口放在一个部件中,将第2层到第3层放置在另一个部件中

  

查看模型依赖项

通常,您根本不需要传递视图模型。传递数据(a.k.a.模型),视图模型本身不会保留任何其他地方无法获得的数据或对视图模型绑定的视图有价值的任何数据。

  

抽象模块类

你的 prism应用程序引用了 prism ......那又怎样?只要IModule实施只收到IUnityContainer,我根本不在意。如果有人需要发布一个事件,他就会得到IEventAggregator ......那个接口已经存在了,你可以在测试中注入一个模拟,所以不需要进一步的抽象。 / p>