インターフェースを実装することでコア機能を拡張できるフレームワークを構築しようとしています。以下は、このインターフェースの唖然とした例です。
public interface MyInterface
{
IData GetData(string p1, char p2, double p3);
}
最近、このインターフェイスを変更することにしました(依存するコードを壊してはいけないことはわかっていますが、実際には、このインターフェイスを実装しているサードパーティがまだないため、「やり直し」の機会があります。このインターフェースを正しく実装するため)。
ソフトウェアを正しく機能させるには、このインターフェイスにさらに2つのパラメータを追加する必要があります。私たちが考えている2つの方法は、次のように署名に追加することです。
public interface MyInterface
{
IData GetData(string p1, char p2, double p3, bool p4, DateTime p5);
}
または、このようなパラメータオブジェクトを作成します
public class MyParameters
{
public bool p4 { get; set; }
public DateTime p5 { get; set; }
}
そして、次のようにメソッドの最後にそれらを追加します。
public interface MyInterface
{
IData GetData(string p1, char p2, double p3, MyParameters p4);
}
私は、どちらの方法が「最も」正しい方法であるかについてのある種のガイダンスを探しています。私は両方のカテゴリーで賛否両論を見ることができますが、私の偏見が私を間違った道に導くことを望んでいません。
私の主な関心事のいくつかは次のとおりです。
- ソフトウェアの拡張性-インターフェースを実装することで、ユーザーがまだ考えていないことを実行できるようにしたい
- 保守性-理想的には、GetData()の呼び出しを担当するコードに再度触れる必要はありません。
- クリーンなAPI-サードパーティの開発者を苦しめるために到達したソリューションは必要ありません
この問題のガイダンスを得るためにオンラインでどのような質問をするべきかさえわかりません。答えは「依存する」(p1-p5がGetData()関数の目的にどの程度関連しているかなど)と感じていますが、評価に役立つ質問のリストを誰かに教えてもらえますか?一方のソリューションがもう一方のソリューションよりも優れているかどうか。