依赖注入(DI)是一种众所周知的流行模式。大多数工程师都知道它的优点,例如:
- 使单元测试中的隔离变得可能/容易
- 明确定义一个类的依赖
- 促进良好的设计(例如,单一职责原则(SRP))
- 启用快速(开关实现
DbLogger
的,而不是ConsoleLogger
例如)
我认为业界普遍认为DI是一种很好的有用模式。目前没有太多批评。社区中提到的缺点通常很小。他们中的几个:
- 增加班数
- 创建不必要的接口
目前,我们与同事讨论建筑设计。他相当保守,但思想开放。他喜欢质疑一些我认为很好的事情,因为IT领域中的许多人只是复制最新趋势,重复优势,而且通常不会考虑太多-不要分析得太深。
我想问的是:
- 只有一个实现时,应该使用依赖注入吗?
- 我们应该禁止创建除语言/框架对象之外的新对象吗?
- 如果我们不打算对特定的类进行单元测试,那么注入单个实现是个坏主意(假设我们只有一个实现,因此我们不想创建“空”接口)吗?
UserService
该类,那么它只是逻辑的持有者。它被注入数据库连接,并且测试在回滚的事务内部运行。许多人会称这种做法不好,但我发现这样做非常有效。不需要仅仅为了测试而扭曲您的代码,您就可以发现集成测试中的错误。