以下のコードを考えてみましょう (簡略化されています)。それぞれが独自の特定のインターフェイスを実装する特定の DTO オブジェクトのリストを返すサービス クラスがあります。実際のコードでは、レガシー コードを使用しているため、Dataset を反復処理することによってこれらのデータが取り込まれます。
質問:
DTO を新しくしたり、Service Locator アンチパターンを使用したりせずに、DTO を作成/使用するにはどうすればよいですか? コンポジション ルートで空の DTO オブジェクトを作成し、コンストラクターを介してそれを Service クラスに挿入することは、あまり意味がありません。実際には、リストを作成するときに DTO を一種の一時変数として使用するからです。
コードでは、DTO を新しくする私の例を見ることができます。しかし、これは、最初から DTO にインターフェイスを実装させない場合よりも気分が良くありません。では、インターフェイスを実装すべきではないので、DTO で DI を使用しないでください。
public class Services : IServices
{
public IList<IDTO> GetDTOs()
{
...
List<IDTO> dtos = new List<IDTO>();
foreach (c in d)
{
DTO dto = new DTO();
dto.x = c.x;
dto.y = c.y;
dto.z = c.z;
dtos.Add(dto);
}
return dtos;
}
}