最初の部分(A)と2番目の部分(B)が3番目の部分(C)に依存しているプログラムC#
(またはインターフェイスを抽象化した他の言語)を想定します。たとえばClassA
、プロジェクトAとClassB
プロジェクトBのクラスがプロジェクトCのインスタンスに依存する3つのプロジェクトを持つVisual Studioソリューションを想定しますClassC
。インターフェイスを実装から分離したいので、インターフェイスを作成してとIClassC
で使用します。どのプロジェクトでインターフェースを宣言する必要がありますか?ClassA
ClassB
IClassC
4 に答える
ProjectC は ProjectA または ProjectB に依存していないように思えますが、(クラスがそれを実装できるように) 明らかにインターフェイスについて知る必要があります。したがって、ProjectC またはすべてのプロジェクトが依存する他のプロジェクトにある必要があります。(インターフェイスのためだけに別のプロジェクトを作成することもできますが、それが役立つことはめったにありません。)
プロジェクト C、または別のインターフェイス プロジェクト プロジェクト I
ほとんどの場合、それはプロジェクト C にありますが、アセンブリをプラグイン可能にしたい場合は、インターフェイス C の実装を変更できることを意味します。プロジェクト C のコードを変更します。
この場合、DIP 原則を逆依存関係に適用する必要があるため、インターフェイス C は新しいプロジェクト コール IC にある必要があります。依存関係は次から変更されます。
A -> C
B -> C
に:
C -> IC
A -> IC
B -> IC
したがって、この方法では、C のコードを変更したり、C を C' に置き換えたりしても、A と B には影響しません。
ClassC プロジェクトで宣言できます。これは、参照の観点からは問題ありません。
独自のインターフェイス プロジェクトに配置することもできます。これにより、テスト プロジェクトなどでインターフェイスを個別に参照できるようになります。