如何使用 Prism 和 Unity 实现真正的松散耦合
how to achieve true loose coupling using Prism and Unity
我已经使用 Prism
和 Unity
框架开发了一个 WPF 应用程序,但我对以下是否正确实施它们感到担忧。
Abstract classes / Interfaces - 我已经为一个组件中的所有层组织了接口,然后在各自的库中引用了它执行。现在,引用的库可以访问其他层的所有非必需接口。例如服务层可以访问 UI
接口。就 clear separation
而言,这是正确的实现吗?还是我应该将其拆分为多个程序集。
视图模型依赖关系 - 我主要使用 EventAggregator
来在视图模型之间进行通信。在某些情况下,我直接在构造函数中传递其他视图模型的实例,并使用 DI 容器解析它。我想通过引入接口来省略直接视图模型依赖,以实现清晰的分离。我怎样才能将视图模型的界面组织成一个单独的程序集,以便其他开发人员可以 understand.To 避免创建多个 UI 项目,我只创建了一个程序集并将它们逻辑上分成文件夹。
抽象模块 Class - 我没有在 bootstrapper.cs
文件中指定所有依赖项,而是将它们分解到相应的模块中。我的大多数 class lib 项目都引用了 Prism 库。因此,UI 特定命名空间被添加到非 UI
相关项目。有没有更好的方法来实现这个目标?
Abstract classes / Interfaces
我会根据需要选择尽可能多的 "interface-assemblies",太多会造成伤害。示例:如果您需要 防止第 1 层与第 3 层潜在通信,请将第 1 层到第 2 层的接口放在一个组件中,并将第 2 层到第 3 层的接口放在一个组件中在另一个。
View Model dependencies
通常,您根本不需要传递视图模型。传递数据(a.k.a.model),视图模型本身不保存任何其他地方不可用或对任何人有价值的数据,但视图绑定到视图模型。
Abstract Module Class
您的 prism 应用程序 引用了 prism...那又怎样?只要 IModule
实现收到 IUnityContainer
我根本不会在意。如果有人需要发布事件,他会得到 IEventAggregator
...这已经是一个接口,您可以在测试中注入模拟,因此无需进一步抽象。
我已经使用 Prism
和 Unity
框架开发了一个 WPF 应用程序,但我对以下是否正确实施它们感到担忧。
Abstract classes / Interfaces - 我已经为一个组件中的所有层组织了接口,然后在各自的库中引用了它执行。现在,引用的库可以访问其他层的所有非必需接口。例如服务层可以访问
UI
接口。就clear separation
而言,这是正确的实现吗?还是我应该将其拆分为多个程序集。视图模型依赖关系 - 我主要使用
EventAggregator
来在视图模型之间进行通信。在某些情况下,我直接在构造函数中传递其他视图模型的实例,并使用 DI 容器解析它。我想通过引入接口来省略直接视图模型依赖,以实现清晰的分离。我怎样才能将视图模型的界面组织成一个单独的程序集,以便其他开发人员可以 understand.To 避免创建多个 UI 项目,我只创建了一个程序集并将它们逻辑上分成文件夹。抽象模块 Class - 我没有在
bootstrapper.cs
文件中指定所有依赖项,而是将它们分解到相应的模块中。我的大多数 class lib 项目都引用了 Prism 库。因此,UI 特定命名空间被添加到非UI
相关项目。有没有更好的方法来实现这个目标?
Abstract classes / Interfaces
我会根据需要选择尽可能多的 "interface-assemblies",太多会造成伤害。示例:如果您需要 防止第 1 层与第 3 层潜在通信,请将第 1 层到第 2 层的接口放在一个组件中,并将第 2 层到第 3 层的接口放在一个组件中在另一个。
View Model dependencies
通常,您根本不需要传递视图模型。传递数据(a.k.a.model),视图模型本身不保存任何其他地方不可用或对任何人有价值的数据,但视图绑定到视图模型。
Abstract Module Class
您的 prism 应用程序 引用了 prism...那又怎样?只要 IModule
实现收到 IUnityContainer
我根本不会在意。如果有人需要发布事件,他会得到 IEventAggregator
...这已经是一个接口,您可以在测试中注入模拟,因此无需进一步抽象。