gpt4 book ai didi

dependency-injection - 软件层的依赖注入(inject)和解耦

转载 作者:行者123 更新时间:2023-12-04 08:21:42 24 4
gpt4 key购买 nike

我正在尝试实现依赖注入(inject)以使我的应用程序测试人员友好。
我有一个相当基本的疑问。

数据层使用 SqlConnection 对象连接到 SQL 服务器数据库。
SqlConnection 对象是数据访问层的依赖项。依据
依赖注入(inject)的规律,我们不能 new() 依赖对象,而是
通过构造函数参数接受它们。不想惹恼DI众神,我
尽职尽责地在我的 DAL 中创建一个接受 SqlConnection 的构造函数。

业务层调用 DAL。因此,业务层必须传入 SqlConnection。
表示层调用业务层。因此它也必须传入 SqlConnection
到业务层。

这对于类隔离和可测试性非常有用。但我们不只是把
UI 和业务层到发生的数据层的特定实现
使用关系数据库?

为什么表示层和业务层需要知道底层数据存储
是 SQL 吗?如果应用需要支持 SQL Server 以外的多个数据源怎么办
(例如 XML 文件、逗号分隔的文件等)此外,如果我添加另一个对象怎么办
我的数据层依赖于它(例如,第二个数据库)。现在,我必须
修改上层以传入这个新对象。

我怎样才能避免这种旋转木马并在没有痛苦的情况下获得 DI 的所有好处?

最佳答案

坦率地说,您应该做的是创建一个通用接口(interface)来访问您的数据。一个Repository,然后创建这个接口(interface)的Sql Implementation,不要注入(inject)你的SqlConnection。

这样,在测试中,您只需将通用接口(interface)的 SqlImplementation 替换为测试实现(模拟)即可。

我认为您对 DI 的研究太过分了。在 Sql 实现的情况下,您可能应该注入(inject)连接字符串,而不是 SqlConnection 本身。

关于dependency-injection - 软件层的依赖注入(inject)和解耦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2925775/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com