依存性注入について知って以来、何かを注入するか、クラス内に作成するかを決定するのに苦労しています。
DI を使用しない次のサンプルを検討してください。
class Car
{
private Wheels _wheels;
private Chasis _chasis;
private Fuel _fuel;
public Car()
{
_wheels = new Wheels();
_chasis = new Chasis();
_fuel = new Fuel();
}
public ExhaustGas Exhaust
{
get
{
return new ExhaustGas();
}
}
}
車内で作成されたこれらのインスタンスのうち、何を注入しますか? もしそうなら、あなたはどのように決定しますか?
これが私の推論です:
- 燃料- 燃料は外部ソースから取得され、燃料が変化する理由が明確にわかるため、それに抽象化 (IFuel) を追加して注入します。
- 車輪- 車輪は車の一部ですが、簡単に交換できます。だから私はそれも注射するべきだと言います。
- シャーシ- これはもっと考えなければなりません。シャーシは車の非常に重要な部分であるため、外部依存として取得するのは少し奇妙に思えます. ただし、シャーシだけでテストを実行することはできますし、ダミーを使用して車をテストすることもできます (そうすべきかどうかはわかりませんが)。オブジェクトのそのような重要な部分を注入する必要がありますか?
- ExhaustGas - これはさらに難しい。IExhaustGas をオンデマンドで作成するファクトリを注入することはできますが、そうすべきかどうかはわかりません。このインスタンスはオンデマンドで作成されるため、ファクトリとして注入するべきではありませんか? そうでない場合、この場合の私の推論は何ですか?
ここで提示した変数についての意見と、いつ何かを注入するか、いつ注入しないかを決定する方法に関するより一般的な理由をお聞かせください。