私は (やや) DI に慣れていないので、維持しているコードベースで 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 は実際にはローカル変数を対象としていないため、DI の誤用です。さらに、ドメイン オブジェクトの複数の実装は必要ありません。単体テストは行いません。たとえそうしたとしても、ドメイン オブジェクトをモックすることはありません。上記のコードからわかるように、ドメイン オブジェクトへの変更は SP への変更の結果であり、MapFromRow メソッドをとにかく編集する必要があることを意味します。
とはいえ、このナンセンスを取り除かなければならないのか、それとも驚くほど素晴らしいことをしているのに見逃しているのでしょうか?