dedlfix: MVC oder was?

Beitrag lesen

Hi!

Das Objekt O ist der Tisch, (der von <s>Kneipe</s> Restaurant erben könnte)

Warum das denn? Im Restaurant gibt es eine Küche, eine Toilette und noch einiges anderes mehr. Was hat der Tisch damit am Hut? Tisch ist eine eigene Klasse. Das Restaurant führt höchstens eine Liste der Tische als eine seiner Eigenschaften.

O hat Eigenschaften wie Anzahl der Sitzplätze und Plätze die schon belegt sind.

Die Anzahl muss kein eigenständige Eigenschaft sein. Da reicht ein berechneter Wert, der aus der List der Sitzgelegenheiten gebildet wird. Schließlich kann man ja Stühle vom Nachbartisch hinzufügen. Sitzgelegenheiten sind auch nciht weiter wichtig, schließlich könnte ein Gast auch neben dem Tisch stehend was trinken.

O hat Methoden wie z.b. das Bestellen einer Speise. Das Servieren könnte eine Methode von Restaurant sein, die geerbt wird.

So funktioniert Objektorientierung nicht. Wenn du die Zuständigkeiten nicht ordentlich trennst und modellierst, kannst du es auch mit der OOP lassen. - Eine Kuh gibt zwar Milch, aber Melken ist keine Methode der Kuh. Dazu nimmt man ein anderes Objekt, einen Melker oder eine Melkmaschine. Eine Melkmaschine erbt auch nicht von einem Melker oder umgekehrt. Wohl aber haben beide das Interface implementiert, das eine Methode Melken hat, dem eine Instanz von Kuh übergeben wird.

Jetzt kommt der Gast ins Spiel, der wiederum bestimmte Methoden nutzt, um den Tisch, das Objekt seinen Wünschen entsprechend zu gestalten.
Das muss kontrolliert werden, Controler C

Das Problem an solchem Unsinn ist, dass man gar nicht weiß, wo man bei der Richtigstellung zuerst ansetzen soll. Deswegen lass ich das fachlich unkommentiert stehen.

Nehmen wir an, O konnte erstellt werden, gehts weiter mit den Aufrufen der Methoden, ein Gast bestellt einen Dinosaurier. Kann fehlschlagen, weil ausgestorben.

Das ist ein Problem der Eingabedatenvalidierung, keins das mit MVC zu tun hat.

Gast nimmt Methode Bestellung und bestellt ein Bier, ok, das geht. Damit wird eine weitere Methode aufgerufen: Bier servieren.

Du beschreibst einen Getränkeautomat, kein komplexes Restaurant wie in der Anforderung.

C wacht über die Benutzereingaben, die Gast macht:

Das ist eine Aufgabe für ein Observer-Pattern und nichts für MVC.

Von der Objekterstellung über die Aufrufe der Methoden bis zur Zerstörung des Objekts, in cleanup (Destroy) müssen z.B. das Geschirr und die leeren Gläser noch weggeräumt werden.

Äpfel und Birnen. Das Geschirr soll nicht zerstört werden. Lediglich abgeräumt werden muss es. Die Tassen- und Teller-Instanzen müssen nur von der Collection im Tisch-Objekt zu der der Spülmaschine gebracht werden. Später dann in die vom Schrank.

Ansonsten sind Objekte erzeugen und zerstören Nebenhandlungen beim Programmieren. Das wird nicht alles vom Controller überwacht, dafür gibt es den Garbage Collector. Selbst wenn man einen solchen nicht hat, gibt es Objekte, die außerhalb des Controllers erzeugt werden, mit denen er aber arbeiten muss und die auch nach dessen Arbeitsbeendigung noch existieren (müssen). Das ist ebenfalls nichts, das mit mit dem MVC-Pattern direkt was zu tun hat.

Das Abräumen des Tisches ist eine Aktion, die ein Kellnerin-Controller erledigen kann, aber die Auslösung dieser Aufgabe braucht irgendeinen externen Anstoß - sei es durch den Anwender ("bitte mal abräumen") oder über eine Observierung (aufgegessen / Platz verlassen). Üblicherweise ist die Kellnerin Observator und Controller in Personalunion. Beim Programmieren würde man das jedoch sicher nicht vereinen. Da könnte man beim Nobelrestaurant eine Anleihe nehmen, das einen Oberkellner hat, der lediglich den Gästen die Wünsche von den Augen abliest und Aktionen der spezialisierten Controller (Sommelier, Essenbringer, Abräumer, wasweißich) anstößt.

Lo!