.net - 依赖注入(inject)——它是否违反了关注点分离?

标签 .net dependency-injection n-tier-architecture separation-of-concerns

依赖注入(inject)是否违反了涉及 n 层架构的关注点分离?

假设您有以下项目:

MyApp.Data
MyApp.Business
MyApp.Web

如果我使用 DI 告诉业务层要使用哪个数据上下文,这不会违反 SoC 吗?这意味着 UI (MyApp.Web) 必须了解数据访问层 (MyApp.Data) 才能告诉业务层 (MyApp.Business) 使用哪个上下文,对吗?

public class WebForm {
    public void Save(Object dto) {
        BusinessObject bo = new BusinessObject(Data.MyDataContext);
        bo.ValidateAndSave(dto);
    }
}

我一直认为,在 n 层架构中,每一层应该只了解下一层(UI 到业务,业务到数据)。这真的没什么大不了的吗?

最佳答案

总的来说,你是对的。然而,依赖注入(inject)往往被认为是“配置”而不是表示层的一部分(尽管它通常确实存在于表示层中)。如果您的 UI 组件被设计为不了解数据层,那么这才是真正重要的。

如果您正在设计一个可测试的系统,那么业务层和数据层应该独立于 UI,但必须进行一些配置。您可以创建另一个名为 MyApp.Configuration 的层来完成所有这些工作,但大多数人发现这是过度设计的。

重要的是你的组件是否设计得好,而不是UI是否对其他层有一些配置知识。

这实际上与 Web.Config 中的应用程序设置没有什么不同。毕竟,除非您使用面向服务的体系结构,否则一切都在同一台计算机上的同一进程中运行。如果您使用 SoA,那么您将在各自的服务器上配置各个部分。

关于.net - 依赖注入(inject)——它是否违反了关注点分离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12994507/

相关文章:

vb.net - 如何在3层(单层)应用程序中BLL和UI之间传递数据?

asp.net-mvc - DBContext、Repository 和 UnitOfWork 应该位于哪一层?

asp.net - 在 Linux 上运行 ASP.Net 与标准的以 Microsoft 为中心的解决方案相比如何?

c# - 具有通用类型字段的结构的大小

.net - 使用 Rotativa 将 PDF 文件保存为字节数组或流

c# - 具有基于数据库值的动态连接字符串的存储库模式

java - DTO、DAO 或服务层?

c# - 如何以Xamarin形式显示gif图像?

java - SpringBoot : Unsatisfied dependency NoSuchBeanDefinitionException, 期望至少有 1 个有资格作为 Autowiring 候选者的 bean

java - 在 Spring 中将 bean 注册为字符串列表