Ich habe eine Klasse, in der viele Parameter wie bei der neuen API-Integration hinzugefügt werden.Best Practice, wenn es einen Konstruktorwechsel in Java-Objekten gibt
Zum Beispiel früher hatte ich eine Klasse mit 4 Parametern:
Integer a;
String b;
Map<String, String> c;
List<Integer> e.
So der Konstruktor war:
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;
}
Mehrere Teams haben integriert mit meinem API diesen Konstruktor in ihrem Code verwenden. Nach einiger Zeit wurde dieser Klasse ein neuer Parameter hinzugefügt. das heißt
Double d;
So habe ich einen neuen Konstruktor:
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;
}
Und ich den vorherigen Konstruktor markiert als veraltet. Ich habe den vorherigen Konstruktor nicht entfernt, da der Code des Clients beschädigt würde.
Als die neuen Parameter hinzugefügt werden, habe ich jetzt Konstruktoren mit 5 Parametern.
Gibt es eine bewährte Methode, wie die Konstruktoren veraltet/entfernt werden sollten, damit diese Art von Szenario nicht auftritt?
Nicht sicher, ob dies eine gute Idee ist, aber Sie können Usign [Lombok] (https://projectlombok.org/features/Builder.html) Builder-Muster versuchen. Das einzige Problem (worüber ich mich frage, ob das eine Antwort für dich ist) ist, dass Lombok davon ausgeht, dass Instanzen auf diese Weise erstellt werden: 'Type.builder.param1 (valueParam1) .others (valueOthers). (...) .. . (...). build', was für frühere Kunden nicht verfügbar ist.Aber wenn Sie mit ihnen verhandeln, würden sie das nicht können? Ich meine, Lombok gibt Ihnen einen selbstverwalteten Konstruktor, der unabhängig von der Reihenfolge der Parameter und unabhängig von der Nummer ist. –
Verwenden Sie "Builder-Muster" und in der aktuellen Klasse "Überladung" für Constractoren – Hosseini
Mögliche Duplikate von [Best Practice für die Übergabe vieler Argumente an die Methode?] (Http://stackoverflow.com/questions/2432443/best-practice-for- Passing-Many-Argumente-to-Methode) – Joe