新しいAPIの統合ごとに多くのパラメータが追加されているクラスがあります。例えばjavaオブジェクトにコンストラクタの変更がある場合のベストプラクティス
は、以前の私は4つのパラメータを持つクラスを持っていた:
Integer a;
String b;
Map<String, String> c;
List<Integer> e.
ので、コンストラクタは:
public SampleClass(Integer a,
String b,
Map<String, String> c,
List<Integer> e)
{
this.a = a;
this.b = b;
this.c = c;
this.e = e;
}
いくつかのチームは自分のコードでこのコンストラクタを使用して、私のAPIと統合しています。 しばらくしてから、このクラスに新しいパラメータが追加されました。すなわち
Double d;
だから私は、新しいコンストラクタを追加しました:
public SampleClass(Integer a,
String b,
Map<String, String> c,
List<Integer> e,
Double d)
{
this.a = a;
this.b = b;
this.c = c;
this.e = e;
this.d = d;
}
を非推奨として、私は、以前のコンストラクタをマーク。以前のコンストラクタを削除しなかったのは、削除した場合、クライアントのコードが破損するためです。
新しいパラメータが追加されるにつれ、5つのパラメータを持つコンストラクタが追加されました。
このようなシナリオが発生しないように、コンストラクタを非推奨/削除する方法に関するベストプラクティスはありますか?
これが良い考えであるかどうかはわかりませんが、[Lombok](https://projectlombok.org/features/Builder.html)ビルダーパターンを使用してみてください。唯一の問題(私はこれがあなたの答えだろうと思います)は、Lombokはインスタンスがこのように作成されていることを信頼しています: 'Type.builder.param1(valueParam1).others(valueOthers)。(...).. 。(...)。ビルド 'これはあなたが以前のクライアントのために利用できないものです。それでも彼らと交渉すれば、彼らはそれをすることができないでしょうか?私はロンボクがあなたにパラメタの順序に無関係で、番号とは独立した自己管理のコンストラクタを与えることを意味します。 –
'builder Pattern'を使用し、現在のクラスではコンストラクタに' overloading'を使用します – Hosseini
[メソッドに多くの引数を渡すためのベストプラクティス?](http://stackoverflow.com/questions/2432443/best-practice-for-多くの引数を渡す) – Joe