洋葱架构:可以 UI 依赖域
Onion Architecture : Can UI depend on Domain
我正在制作一个具有洋葱架构的 ASP.NET MVC 网站。我已经实现了一个存储库模式,现在正在我的项目中创建一个 Controller 方法。这是我的架构:
- 域:实体/域接口
- 存储库:使用 Entity Framework Code First
的通用存储库(目前)
- 服务:调用存储库的通用服务
- MVC
现在在我的 MVC 项目中,我需要访问存储库,但根据 Jeffrey Palermo 的说法,MVC 依赖于服务和域,但没有提到存储库。
我可以让我的 UI 依赖于 Repository 吗?
我现在没有依赖项无法做任何事情,因为服务创建依赖于存储库。我已经尝试修改 Startup.cs 以不直接在我的控制器中使用 Repository 对象,但这仍然意味着我需要添加对 Repository 的引用(参见 http://dotnetliberty.com/index.php/2015/10/15/asp-net-5-mvc6-dependency-injection-in-6-steps/ )
此时 MVC (UI) 是组合根,它需要知道所有层才能将它们注册到 DI 容器。
启动将在注册时直接引用实现,或者通过从该层公开的扩展方法间接引用实现。无论哪种方式,如果要将组合根添加到 DI 容器,组合根都需要引用所有较低层。
控制器也应该依赖于较低层的抽象而不是具体化。
如果将存储库直接注入控制器,那么我建议检查设计,因为这可能表明职责混合。
我正在制作一个具有洋葱架构的 ASP.NET MVC 网站。我已经实现了一个存储库模式,现在正在我的项目中创建一个 Controller 方法。这是我的架构:
- 域:实体/域接口
- 存储库:使用 Entity Framework Code First 的通用存储库(目前)
- 服务:调用存储库的通用服务
- MVC
现在在我的 MVC 项目中,我需要访问存储库,但根据 Jeffrey Palermo 的说法,MVC 依赖于服务和域,但没有提到存储库。
我可以让我的 UI 依赖于 Repository 吗?
我现在没有依赖项无法做任何事情,因为服务创建依赖于存储库。我已经尝试修改 Startup.cs 以不直接在我的控制器中使用 Repository 对象,但这仍然意味着我需要添加对 Repository 的引用(参见 http://dotnetliberty.com/index.php/2015/10/15/asp-net-5-mvc6-dependency-injection-in-6-steps/ )
此时 MVC (UI) 是组合根,它需要知道所有层才能将它们注册到 DI 容器。
启动将在注册时直接引用实现,或者通过从该层公开的扩展方法间接引用实现。无论哪种方式,如果要将组合根添加到 DI 容器,组合根都需要引用所有较低层。
控制器也应该依赖于较低层的抽象而不是具体化。
如果将存储库直接注入控制器,那么我建议检查设计,因为这可能表明职责混合。