昨日、私の友人の一人が、車の速度を返すプログラム(依存性注入を実装しなければならない)を作成するように頼んだ。そこで、私はコンストラクタインジェクションを実装するのに疲れた小さなプログラムを作成しました。依存性注入:コンストラクタ注入を使用
class Program
{
static void Main(string[] args)
{
Maruti objMaruti = new Maruti();
clientClass obj = new clientClass(objMaruti);
obj.getSpeed();
}
}
public class clientClass
{
ISpeed _ISpeed;
public clientClass(ISpeed obj)
{
this._ISpeed = obj;
}
public int getSpeed()
{
return _ISpeed.Speed();
}
}
public interface ISpeed
{
int Speed();
}
public class Maruti : ISpeed
{
public int Speed()
{
return 200;
}
}
public class Audi : ISpeed
{
public int Speed()
{
return 400;
}
}
public class BMW : ISpeed
{
public int Speed()
{
return 600;
}
}
ここで、メインメソッドで、私の友人は車の速度を確認できます。
class Program
{
static void Main(string[] args)
{
Maruti objMaruti = new Maruti();
clientClass obj = new clientClass(objMaruti);
obj.getSpeed();
}
}
私はこのコンストラクタInjectionとクライアントクラスを作成した理由について質問しました。クラスを直接呼び出すと結果が得られます。
class Program
{
static void Main(string[] args)
{
Maruti objMaruti = new Maruti();
objMaruti.Speed();
//If user wants to check Audi Speed.
Audi objAudi = new Audi();
objAudi.Speed();
}
}
彼は正しいですか?どちらの方が最善で、なぜですか?
彼の次の質問は、あなたが手続き型プログラミングまたは関数型プログラミングを使用できるので、なぜOOPを使ったのですか?これは依存性逆転の例です。 –
この例は、引数として 'ISpeedUsingProvider'を受け入れると良いでしょう。 'clientClass'はどこかの' .getSpeed() 'メソッドを使いますが、' Speed() 'メソッドはありません。上で述べたように、あなたが書いた例は、依存関係の逆転の例です。 – ntohl