M
Hallo Marc,
Eine Klasse Auto, um "Mercedes" und "VW" zu abstrahieren - was hat das für dich mit Entwurfsmustern zu tun?
Ich würde das eher als "OOP-Basics" bezeichnen.
"Schreibe eine Klasse für nur genau eine Aufgabe!". Kann man das so akzeptieren, oder kann eine Klasse auch zwei Methoden beinhalten, die für ganz unterschiedliche Aktionen benötigt werden?
Ich hätte jetzt persönlich eher den Begriff "Concern" verwendet (Zuständigkeit) und dies auch nicht auf Klassen begrenzt,
sondern auf alles:
- verwende eine Variable nur für einen Wert (also speichere nicht in der Variable iSomething einmal das Alter einer Person,
später noch einen allgemeinen Zähler und am Schluss noch einen Magic-Wert für irgendeine Berechnung),
- mache keine Funktionen, die per Flag mal dies, mal was völlig anderes tun,
- mach Klassen, die eine klare Zuständigkeit haben (und ja, das sollte nur eine sein).
Zu deinem Beispiel: ich würde vorschlagen, eine Klasse "Thema" zu machen. Warum? Eine Klasse sollte immer ein "Ding" (ein
Nomen bzw. Substantiv) repräsentieren, kein Verb (im Normalfall).
Eine Methode leseThema sollte es schon rein vom Namen her nicht geben (eher eine Methode namens "lesen" und du schreibst
dann "meinThemaOjekt.lesen()".
Ob das jetzt sinnvoll ist, darüber will ich jetzt nicht urteilen - aber ich persönlich finde, dass ein Thema nichts darüber wissen sollte, wie es "gelesen" wird (ich nehme an, du meinst lesen=von DB lesen). Ansonsten musst du deine Thema-Klasse anpassen, wenn sich die die Art ändert, wie das persistent gemacht ist - und das würde auf ein schlechtes Design hindeuten. Ich kann dir als Beispiel die Vertex-Klassen aus meinem eigenen Hobby-Projekt (ein 3d-Viewer) nennen; die Klasse behandelt rein vertex-spezifische Dinge, aber sie hat keine Ahnung, wie ihre Daten persistiert werden - dafür gibts einen (oder mehrere) Loader. Hat auch noch den Vorteil, dass man 3d-Objekte für Testzwecke auch hardcodieren oder statt aus Files aus einer Db laden kann.
Wie man das lernt? Durch jahrelange Erfahrung. Die meisten Entwürfe müssen immer wieder überdacht werden, selten ist der
erste Wurf das Gelbe vom Ei. Noch ein Wort zu Patterns: Patterns sind erprobte Lösungen zu häufig auftrenden Problemen,
man sollte sie also erst in Betracht ziehen, wenn das Problem vorhanden ist.