Dependency Inversion Principle (SOLID 原則の 1 つ) と一般的な 'Code to Interfaces' または Separated Interface パターンの違いを理解できません。それらはすべて、下位レベルと上位レベルのモジュールを分離するための抽象化レイヤーの作成を提唱しています。
DI の原則は、上位モジュールと下位モジュールの間で対話するためのインターフェイスの作成を想定していますが、インターフェイスが上位レベル パッケージの一部でなければならないことも主張しています。
なぜこれは下位レベルではなく上位レベルの一部である必要があるのですか? その動作を公開しているのは下位レベルなので、デカップリング インターフェイスは下位レベルの一部であるべきではありませんか? 同じ下位レベルに依存する上位レベルのモジュールが複数ある場合はどうなりますか?
または、
すべてのインターフェイスを配置する別のパッケージを作成して、上位レベルと下位レベルの両方で使用できるようにしてみませんか? (これは、Separated Interfaces パターンで想定されています。)
私のジレンマは、相対的な使用法と利点、またはそれらのそれぞれを理解できないことです。
Derek Greer または Robert Martin の記事を引用しないでください。私はそれらの記事を読みましたが、依然として混乱が続いています。