Architecture 设置层之间的依赖关系反转

Architecture 设置层之间的依赖关系反转,architecture,Architecture,任何主体都可以解释如何使用DI IOC在基于层的体系结构中设置层之间的依赖关系,并且还请解释当我们在UI层中创建合成根时,我们需要引用UI层中的所有dll。这让UI开发人员可以直接访问DAL层对象。这将违反UI层不能直接访问DAL对象的规则 任何架构师SME都可以解释使用下面提到的技术堆栈实现分层架构的正确方法是什么吗 这里是技术偏好 ASP.NET MVC 4、REST API服务、企业库(存储库模式)我认为这就是UI层“不应该”访问DAL层和“不能”之间的区别。事实上,强制实施分层是很复杂的

任何主体都可以解释如何使用DI IOC在基于层的体系结构中设置层之间的依赖关系,并且还请解释当我们在UI层中创建合成根时,我们需要引用UI层中的所有dll。这让UI开发人员可以直接访问DAL层对象。这将违反UI层不能直接访问DAL对象的规则

任何架构师SME都可以解释使用下面提到的技术堆栈实现分层架构的正确方法是什么吗

这里是技术偏好
ASP.NET MVC 4、REST API服务、企业库(存储库模式)

我认为这就是UI层“不应该”访问DAL层和“不能”之间的区别。事实上,强制实施分层是很复杂的,这样DAL才是UI层真正无法访问的。关键是,您不应该从UI访问DAL

就像您不应该从UI层访问数据库本身一样,但是没有什么可以阻止流氓开发人员这样做


顺便问一下,您是在手动创建合成根目录吗?您可能应该看看DI框架。它将隔离许多依赖关系,是的,它需要了解所有层,但它将这些东西保存在一个相当漂亮和干净的地方。这家伙对其中的一些有一个很好的概述:

你把N层和DI混合在一起了。两者都是无关概念,互不依赖。为了获得最佳输出,您需要对这两个概念进行深入研究,制作几个原型,并选择最适合您的设计

这仅仅是因为没有“正确”或“不正确”的方法来使用这些技术堆栈实现这两个概念。实现这一目标的方法实在太多了

例如:简单的3层。包括DAL(带数据模型)、BLL引用DAL和表示

4层。数据模型层、DAL引用数据模型、BLL引用数据模型、使用依赖项注入的表示

DDD(域驱动开发),它具有域模型、数据库域模型和表示层(附加CQR)


做你最熟悉的事情。稍后重构/重写。

中这个问题的答案给了我我们想要的答案或解释


谢谢

谢谢Fendy的回复,我们如何判断哪种设计是最好的呢?请回答这个问题。