Ist es in Ordnung, viele Abstract-Klassen in Ihrer Bewerbung zu haben?

9

Wir wollten zunächst ein Strategiemuster mit unterschiedlichen Implementierungen der Methoden in einer Commmon-Schnittstelle implementieren. Diese werden zur Laufzeit basierend auf Benutzereingaben abgeholt.

Wie sich herausstellt, haben wir abstrakte Klassen, die 3 - 5 allgemeine Methoden implementieren, und nur eine Methode für eine unterschiedliche Implementierung, dh die Strategie.

Update: Mit vielen abstrakten Klassen meine ich, dass es 6 verschiedene Funktionen auf hoher Ebene gibt, dh 6 Pakete, und jedes hat seine Schnittstelle + AbstractImpl + (Reihe von Actual Impl).

Ist das in irgendeiner Weise ein schlechtes Design?

Negative Ansichten in Bezug auf die spätere Erweiterbarkeit - Ich bereite mich auf eine Code- / Designüberprüfung mit Senioren vor.

JoseK
quelle

Antworten:

8

Nein, das ist keineswegs ein schlechtes Design. Es ist ein Muster der Vorlagenmethode .

Es soll das unterschiedliche Verhalten eines Algorithmusschritts zusammenfassen, was in Ihrem Szenario wahrscheinlich der Fall ist. Strategie- und Vorlagenmethodenmuster bilden in vielen Fällen eine starke Kombination . Sie haben wahrscheinlich abstrakte Strategien als Rahmen und verwenden das Muster der Vorlagenmethode für konkrete Strategien. Das ist ziemlich sauber.

Es ist erweiterbar und Sie müssen den Code nicht wiederholen. Wenn Sie etwas ganz anderes benötigen, verwenden Sie einfach die Strategieoberfläche, um eine neue abstrakte oder konkrete Strategie zu erstellen.

Falke
quelle
4

Nein, es kann ganz in Ordnung sein (abhängig von den Details - mit diesem geringen Wissen über Ihren konkreten Fall ist es schwer, mehr zu sagen). Es ist vollkommen in Ordnung, gängige Methodenimplementierungen in einer abstrakten Basisklasse zu vereinheitlichen.

Abhängig davon, wie die einzelne abstrakte Methode in Ihren Klassen verwendet wird, ist dieses Muster möglicherweise eher eine Vorlagenmethode als eine Strategie . Wenn es nämlich von einer anderen, endgültigen Methode in der Basisklasse aufgerufen wird und nicht direkt von der Außenwelt.

Péter Török
quelle
1

Muster für Vorlagenmethoden machen eine Unterklasse, um speziellen Code durch eine abstrakte Methode zu implementieren, und die Unterklasse erbt eine gemeinsame Methode von einer Oberklasse. Ich glaube also nicht, dass dies viele abstrakte Klassen hat, es ist nur eine abstrakte Klasse, alle Unterklassen sind Instanzklassen.

Mark xie
quelle
0

Wenn die abstrakten Klassen dieselben Methoden mit demselben Inhalt implementieren, warum dann mehrere abstrakte Klassen?

Wenn sie die Methoden anders implementieren, sehe ich kein Problem.

Um die Erweiterbarkeit zu verbessern, verwenden Sie Schnittstellen. Wenn Sie dann die abstrakten Klassen verschrotten, ist dies weniger problematisch.

Jonno
quelle