假设我们有三层;用户界面,业务,数据。我们正在使用DI。我不希望从UI访问数据层。
问题在于数据层的DI注册。组合根在UI中,我不想在那里有任何数据引用。我找到了answer。据我所知,我们应该引用所有层,并认为它们是库而不是层。这样我可以指定我的业务层使用数据层或我想要的任何其他内容。毕竟这就是DI的原因。
这是正确的,但有一个问题!我们不应该在UI上使用数据层。但是,一旦开发人员意外地从UI引用到Data,而另一个开发人员直接从Data层向UI类注入了一些东西。所以他跳过了我从未想过的业务层。
我该如何处理这种情况?我想有一些限制,但另一方面我想要DI的灵活性。
当然有些人认为我们可以只为依赖注册创建一个单独的库。
这里最好的模式是什么?
答案 0 :(得分:2)
您链接的答案有两个答案,说明在同一个程序集中使用组合根和UI层不是问题:
但是如果您认为这是一个问题,为什么不在自己的程序集中移动UI层?启动程序集不需要具有UI层!如果您创建Windows窗体应用程序,请将所有窗体移动到它们自己的程序集。如果您正在创建ASP.NET MVC应用程序,请将控制器和视图移动到它们自己的程序集。根据您正在构建的应用程序类型,您必须应用某些技巧才能使其正常工作,但对于.NET中的大多数项目类型,这是可能的。
真正的问题是,这值得吗?如果你想要这样做以防止不得不进行代码审查,你就是在欺骗自己。