我(有点)对 DI 很陌生,我正在尝试了解它在我维护的代码库中的使用方式/原因。我发现了一系列将数据从存储过程调用映射到域对象的类。例如:
Public Sub New(domainFactory As IDomainFactory)
_domainFactory = domainFactory
End Sub
Protected Overrides Function MapFromRow(row As DataRow) As ISomeDomainObject
Dim domainObject = _domainFactory.CreateSomeDomainObject()
' Populate the object
domainObject.ID = CType(row("id"), Integer)
domainObject.StartDate = CType(row("date"), Date)
domainObject.Active = CType(row("enabled"), Boolean)
Return domainObject
End Function
IDomainFactory 是用 Spring.Net 注入的。它的实现只是有一系列返回各种域对象的新实例的方法。例如:
Public Function CreateSomeDomainObject() As ISomeDomainObject
Return New SomeDomainObject()
End Function
上面所有的代码都让我觉得比没用还糟糕。这很难遵循并且没有任何价值。此外,据我所知,这是对 DI 的滥用,因为它并非真正用于局部变量。此外,我们不需要多个领域对象的实现,我们不进行任何单元测试,如果我们这样做了,我们仍然不会模拟领域对象。从上面的代码可以看出,对域对象的任何更改都将是 SP 更改的结果,这意味着无论如何都必须编辑 MapFromRow 方法。
就是说,我应该把这些废话撕掉,还是它正在做一些非常棒的事情而我错过了它?