oop - 依赖注入(inject)和循环引用

标签 oop tdd

我刚刚开始进行 DI 和单元测试,遇到了一个障碍,我相信对于那些更有经验的开发人员来说,这很简单:

我有一个名为 MessageManager 的类,它接收数据并将其保存到数据库中。在同一个程序集(Visual Studio 中的项目)中,我创建了一个存储库接口(interface),其中包含访问数据库所需的所有方法。 该接口(interface)的具体实现在一个名为 DataAccess 的单独程序集中。

因此 DataAccess 需要对 MessageManager 的项目引用才能了解存储库接口(interface)。 MessageManager 需要对 DataAccess 的项目引用,以便 MessageManager 的客户端可以注入(inject)存储库接口(interface)的具体实现。 这当然是不允许的

我可以将接口(interface)移动到数据访问程序集中,但我相信存储库接口(interface)应该与使用它的客户端驻留在同一个程序集中

那我做错了什么?

最佳答案

您应该将您的界面与任一程序集分开。将接口(interface)与消费者或实现者放在一起违背了拥有接口(interface)的目的。

该接口(interface)的目的是允许您注入(inject)任何实现该接口(interface)的对象,无论它是否与您的 DataAccess 对象属于同一个程序集。另一方面,您需要允许 MessageManager 使用该接口(interface)而不需要使用任何具体实现。

将你的界面放到另一个项目中,问题就解决了。

关于oop - 依赖注入(inject)和循环引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/89959/

相关文章:

c++ - 扩展类时的性能,组合与多态性

c++ - 减少重复的方法?

ruby-on-rails - 在 rails 中测试的正确方法

asp.net-mvc - 关于 ASP.NET MVC 中的 TDD 或单元测试的问题

ruby - Ruby 中 nil 的定义在哪里

类似 C++ 的 Moose 与 Perl 的 OOP 用法

objective-c - Xcode:如何访问子类中的方法?

node.js - Mocha 茶兑现多项 promise

c# - .NET 单元测试项目组织

ruby - Rspec : expect vs expect with block - what's the difference?