タスク:開発者が使用するライブラリを設計しています。
目的:将来のバージョンでの変更が既存の開発者に影響を与えないようにする必要があります。
例:
最初のリリース時の状況:
1クラスあります
public class ClassSample
{
String methodSample(String para1,String Para2, int Para3, String Para4);
}
2 回目のリリース中の状況:
要件:
methodSample のレスポンスは、複数の値を返すことができます。
methodSample メソッドにはさらにパラメーターが必要です。
解決策: 1 つの方法は、組み込みのデータ型ではなく、新しいパラメーターを持ち、オブジェクトを返す別のオーバーロードされたメソッドを追加することです。
しかし、上記の解決策の問題点は、将来オーバーロードされたメソッドが多すぎて、パラメーターが多すぎてやり過ぎになることです。
変更されたソリューション 1:
void methodSample(Request request, Response response)
各リリースで (明らかに必要な場合)、Request & Response クラスを変更して、値を取得/設定するための新しいメソッドを追加します。この場合、メソッド内で問題が発生します。呼び出し元が Version10 か Version20 かを区別できません。
変更されたソリューション 2:
void methodSample(AbsractRequest request, AbstractResponse response)
各リリースでは、Request200 が Request100 が AbstractRequest を拡張するように、派生クラスを拡張できます。これは、応答クラスについても同様です。この場合、インスタンスの型を確認することで、呼び出し元が Version10 か Version20 かをメソッド内で確認できます。
要約すると、変更されたソリューション 2 は私には良さそうですが、あなたの考えはどうですか?