2017-05-01 5 views
1

:複数のクラスは、サブクラスレベルで追加した場合、私はちょうどクラスAB、またはそのデザインパターン間の依存関係を削除するための最良の方法を探して2つのクラス間の依存関係を削除するにはどうすればいいですか?例えば

public class A {} 

public class B 
{ 
    public void test() 
    { 
     A obj = A(); 
    } 
} 

は、このために最も適しているのですか?

+0

プログラムしながら、あなたのオブジェクトを模擬することが可能となります。 – dotctor

答えて

6

Aのインスタンスをコンストラクタで受信します。 Aにいくつかのインターフェイスを継承させて、そのインターフェイスをコンストラクタで受け取る方が良い場合もあります。 Dependency InjectionInversion of Controlの概念に

public interface IA {} 
public class A : IA {} 

public class B 
{ 
    public IA AInstance { get; set; } 
    public B (IA a) 
    { 
     AInstance = a; 
    } 

    public void test() 
    { 
     /* do something with `AInstance` */ 
    } 
} 

ルック:

  1. What is dependency injection?
  2. What is Inversion of Control?

そしてSOLID principals


の下でそれをすべてを包みます

あなたは依存関係としてIAを取得するが、その後工場のデザインパターンを使用してBISomeFactory

+0

ありがとう - しかし、ここで私たちはBクラスの中で新しいキーワードを使う必要があると思います。もう一度お互いに依存しています。 – ROOMY

+0

ありがとう - 私も同じだと思いますが、Bの中に新しいキーワードを使用するのを避ける方法はありますか? – ROOMY

+0

@ROOMY - 'A'に' B'クラスを追加する必要がある場合は、それが本当に必要で、それでもまだ 'Factory'デザインパターンを見て、いくつかの' ISomeFactory'に依存している場合は –

0

のいくつかのインスタンスに依存しましょうあなたのBクラスでの新しいインスタンスを作成する必要ができない場合、私はあなたをお勧めしたいですデザインパターンとしてIoCを使用します。それはあなたのクラスの依存関係を削除し、インターフェイスではない実装にユニットテスト

https://msdn.microsoft.com/en-us/library/aa973811.aspx

+0

依存性注入は十分でなければなりません – Aphelion

+0

彼はデザインパターンを求めました;) – Nieksa

+0

その後、私たちはそのデザインパターンを解決しなければなりません。これが過度の場合、なぜIoCに案内するのですか?彼が必要とするのはデザイン原則です。この場合は単一の責任と依存関係の逆転になります。 – Aphelion

関連する問題