...
- Ableitungen pro Autohersteller halte ich im allgemeinen auch nicht für sinnvoll
...
Sind sie aber. Alles andere (Enum/ Eigenschaft 'Fahrzeugtyp') bedeutet auch: Verletzung des
OCP, d.h. die 'Auto-Klasse' müsste jedes mal angefasst werden, wenn eine neue Type mit spezifischen Eigenschaften hinzukommt. Hast Du dagegen pro Hersteller eine eigene Klasse, bleiben alle existierenden Klassen beim Hinzufügen einer neuen Klasse unangetastet, was den Code wesentlich robuster, d.h. stabiler macht.
Nur wenn es je Hersteller garantiert keine individuellen Eigenschaften gäbe (was hier nicht er Fall ist), muss man keine einzelne Klassen bilden.
[/DELPHI]
Da stimme ich Dir zu, allerdings sehe ich den Hersteller eher als Baustein, weniger als Herzstueck der Auto-Klasse an. Die Frage wäre welche Informationen des Herstellers benötigt werden und was damit im weiteren Verlauf ermittelt werden soll.
EDIT: Habe deinen Post gerade noch einmal gelesen: Du meinst, ein TAuto, aber je Hersteller unterschiedliche Ausstattungen? Das wäre eine Möglichkeit, wobei diese Architektur impliziert, das man den Hersteller wechseln kann. Weiterhin müsste man die Eigenschaft 'Ausstattung' jedes Mal casten, um auf spezifische Eigenschaften eines Herstellers zu gelangen.
Ferner müsste die Zuordnung 'Fahrzeugtyp => Ausstattungsklasse' in einer Factory erfolgen, die der Konstruktor der Klasse TAuto aufruft, damit OCP nicht verletzt wird:
Ja, oder so ähnlich. Die Frage ist, ob er in seinem Programm die Ausstattungen je Auto konfigurieren kann und welche Rolle der Hersteller spielt. Letztendlich gibt es ja auch oft den Fall, dass Hersteller A ein Auto (teilweise) anfertigt und dann Hersteller B dieses fertigstellt (z.B. individuelle Innen-Austattung) und sein Logo draufsetzt (z.B. Mercedes CITAN).
Ich sehe daher Auto, Hersteller und Ausstattung relativ abstrakt und flexibel - es muss m.E. lediglich an einer Stelle entschieden werden, wer mit wem verheiratet werden darf (z.B.: Welche Ausstattungen können für ein Auto X von Hersteller Y verbaut werden). Das könnte dann z.B. im THersteller untergebracht werden (quasi ein Ausstattungsprofil) - die komplexere Logik, welche Ausstattung eine andere aussticht oder ersetzt, sollte dann wiederum ausgelagert werden.
Aber wie immer finde ich es im allgemeinen schwierig konkrete Vorschläge zu geben, wenn wir den genauen Anwendungsfall nicht kennen. Des Weiteren glaube ich, dass es unmöglich ist den Code aufzuräumen, wenn alleine die Anpassung der Listenverarbeitungen so lange dauern sollte wie der TE vermutet hat.
Und was genau meinst Du mit "... müsste man die Eigenschaft 'Ausstattung' jedes Mal casten ...", stehe grad auf dem Schlauch?