2016-11-27 103 views
0

我已经开发了一个WPF应用程序,使用了PrismUnity框架,我对以下内容有一些担忧,无论我是否已正确实施它们。如何使用棱镜和Unity实现真正的松耦合

  • 抽象类/接口 - 我已经在一个程序集中的所有层次构成接口,然后引用它在各个图书馆实施。现在,引用的库可以访问其他层的所有非必需接口。对于例如服务层可以访问UI接口。这是clear separation的正确实施,还是应该将其拆分为多个部件。

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

  • 摘要模块类 - 代替在bootstrapper.cs文件中指定的所有依赖关系的,我分解它们各自模块中。我的大部分lib库项目都提到了Prism库。因此,UI特定的名称空间被添加到非UI相关项目中。有没有更好的方法来实现这一目标?

回答

1

抽象类/接口

我会去的一样多“界面组件”在必要时,有太多的伤害。例如:如果需要以防止第1层与第3层进行潜在的通信,请将第1层到第2层的接口放在一个组件中,而将第2层到第3层的接口放在另一个组件中。

视图模型依赖

通常情况下,你应该不需要绕过所有视图模型。传递数据(a.k.a.模型)时,视图模型本身并不包含任何其他地方不可用或对任何人都有价值的数据,除了绑定到视图模型的视图。

摘要模块类

棱镜应用引用棱镜 ...还等什么?只要IModule实现收到IUnityContainer我根本不在乎。如果有人需要发布活动,他会得到IEventAggregator ......这已经是一个接口了,你可以在测试中注入模拟,所以不需要进一步的抽象。

+0

非常感谢。如果我可以问,请帮助我进一步理解以下几点。 **抽象模块类** - 是否是一个好主意,实现一个逻辑来显示/隐藏视图基于某些事件为各自的UI模块。对于例如如果没有连接,我想隐藏所有模块并显示错误屏幕。目前,我有一个单独的'ViewManager',它在一个地方卸载所有的视图。我想在每个“UI”模块中改变这种逻辑,但我对发布如此多的通知持怀疑态度。 –

+0

如果这是一个影响所有模块的事件,我会对它作出集中反应。您可以在覆盖整个外壳的外壳中添加一个区域,通常为空。直到连接丢失,然后将该区域导航到隐藏整个应用程序的错误屏幕。这样,您只需对连接丢失做出一次反应,并确定该UI已禁用。 – Haukinger