インターフェイスを設計するとき、私は何度も同じ状況に遭遇し続けます。この状況では、インターフェイスを使用する特定の実装では、インターフェイスに特定のパラメータが必要ですが、他の実装では必要ありません。
- インターフェイスを設計する際のベストプラクティスは何ですか?
- インターフェイスを実装するが、すべてのパラメーターを使用しない特定の実装があっても大丈夫ですか?
または、これらの状況では、パラメーターのリスト(いくつかの構造)を取り込んで、各実装でそれに応じてそのリストを処理する必要がありますか?
インターフェイスを設計するとき、私は何度も同じ状況に遭遇し続けます。この状況では、インターフェイスを使用する特定の実装では、インターフェイスに特定のパラメータが必要ですが、他の実装では必要ありません。
または、これらの状況では、パラメーターのリスト(いくつかの構造)を取り込んで、各実装でそれに応じてそのリストを処理する必要がありますか?
いいえ、それは大丈夫ではありません。それはLiskovsSubstituionPrincipleを破ります。
あなたのインターフェースがやりすぎだと私には思えます。インターフェイスの継承を使用するか、インターフェイスを複数のインターフェイスに分割します。1つの大きなインターフェイスよりも多くの小さなインターフェイスを使用する方がよいことに注意してください。クラスはそれらすべてを実装できます。
クラスのようなインターフェースは、SRP(単一責任原則)に従う必要があります。インターフェースはアプリケーションの残りの部分に設計を強制するため、インターフェースがそうすることがはるかに重要です。
また、インターフェイスからプロパティをできるだけ追加しないようにする傾向があります。
場合によっては大丈夫です。インターフェイスが維持することを約束しているコントラクトを満たしている限り、実装のパラメーターを実際にどのように処理するかは重要ではありません。
ただし、これらのパラメーターを必要とするものに対して、より具体的なインターフェースが実際に必要ないかどうかを再検討する必要があります。抽象化スタックでは、「より低い」インターフェースに「より高い」パラメーターが必要になることは、カプセル化の中断です。