私は、インターフェイスを実装することによって人々が私たちのコア機能を拡張できるようにするフレームワークを構築しようとしています。以下は、このインターフェイスの下の例です。メソッドパラメータとパラメータオブジェクト
public interface MyInterface
{
IData GetData(string p1, char p2, double p3);
}
最近、我々は(私は依存のコードを壊すべきではありません知っているが、真実は、我々はまだこのインタフェースを実装する任意のサードパーティを持っていないので、我々はチャンスを持って、このインターフェイスを変更することを決定しましたこのインタフェースを正しく実装するための "do-over")。
ソフトウェアが正常に動作するためには、このインターフェイスに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);
}
私はどのような方法で進むべき最も正しい方法であるかに関するある種の指針を探しています。私は両方のカテゴリーで賛否両論を見ることができますが、私の偏見が私を間違った方向に導いてくれることを望んでいません。
私の主な懸念事項は以下のとおりです。ソフトウェアの
- 拡張性 - 私は、ユーザーが
- 保守インタフェースを実装することで、私はまだ考えていないことを行うことができるようにしたい - 理想的には、私は
- クリーンAPI再びのGetData()を呼び出すための責任があるコードタッチする必要はありませんしたいと思います - サードパーティの開発者はうんざり、私は私が作ることに到着するソリューションを望んでいないが
私はこの問題の指針を得るためにオンラインで質問するのにどのような質問があるか分かりません。私は、答えが「それは依存している」(p1-p5がGetData()関数の目的にどのように関係しているかなど)、誰かが私が評価するのを助けるために質問しなければならない質問のリストを指し示すことができる1つのソリューションが他のソリューションより優れているかどうか
インターフェイスがバージョン管理されていることをお勧めしますが、APIが普及すれば既存のものを破損することなく誰も追加の機能を追加できますコード。 –