Ich entwerfe eine Reihe von kleinen C++-Klassen, die alle eine einzelne Schnittstelle implementieren. Nennen wir die Schnittstelle IHandler
. Sie hat nur eine Methode.
Es gibt eine Menge von Handlern, einen für jeden Typ in unserem Bereich. Nennen wir sie FooHandler
, BarHandler
usw. Es gibt auch einen PassiveHandler
, der nichts tut (dies wird für Bereichsobjekte verwendet, die nicht behandelt werden müssen).
Also könnte unsere Hierarchie so schön und flach aussehen:
IHandler
|-PassiveHandler
|-FooHandler
|-BarHandler
| (...)
|-BazHandler
Allerdings benötigen alle Handler ein Datenmitglied, nennen wir es domainObject
, also dachte ich daran, eine gemeinsame Oberklasse Handler
zu extrahieren, die nur dieses Objekt enthält.
Außerdem benötigen alle Handler außer PassiveHandler
ein zweites Datenmitglied, nennen wir es infoObject
, also dachte ich daran, eine weitere gemeinsame Oberklasse ActiveHandler
zu extrahieren, um dieses Objekt zu halten. Jetzt ist die Hierarchie viel tiefer, aber wir haben einige Duplikate entfernt.
IHandler
|-Handler
| |-PassiveHandler
| |-ActiveHandler
| |-FooHandler
| |-BarHandler
| | (...)
| |-BazHandler
Würden Sie sich für das flache Design entscheiden, in dem die Deklaration des domainObject
-Mitglieds in allen Klassen dupliziert wird und die Deklaration des infoObject
in den meisten Fällen? Oder würden Sie die kompliziertere Hierarchie bevorzugen, in der Duplikate entfernt werden? Ist es das wert, nur für diese Datenmitglieder?