Hellihello Daniel,
Mh, das entspricht doch aber meiner Interfacemethode My_Model->read(). Der würde ich mitgeben $category und $id, und sie würde mir ein Locationobjekt oder Artistobjekt zurückgeben.
Ja, nur dass Du trennen kannst, zwischen der eigentlichen Abfrage und was dafür genau an SQL notwendig ist. Wenn Du nur SQL verwendest, musst Du entweder Deinem "My_Model" eine Methode für jedes Query hinzufügen, oder Du erlaubst dem Controller direkt Queries auszuführen, womit der Controller vom konkreten SQL-Dialekt (lässt sich evtl halbwegs in Grenzen halten, wenn man versucht nur Standard-SQL zu verwenden) abhängt und außerdem solche Dinge wie Queries über Schnittstellen nicht gehen. Dazu müsste der Controller ja wissen, welche Implementierungen es gibt und das hart in den Controller zu codieren ist natürlich ziemlich unflexibel.
Genau das war ja der Ansatz. Keine direkten speichermethodenabhängigen Queries im Controller. Jetzt verstehe ich Dich so, dass Du sagst: im Model auch nicht, denn das Model ist das logische Abbild der Datenstruktur, auch unabhängig von der Speichermethode. Klingt plausibel. Dann kommt dann also noch eine Speicherklasse dazu, wie ja auch u. und o.g..
Genau. Ich (also Hybernate) könnte theoretisch im Hintergrund alle Objekt-Queries in XML-xpath-Abfragen umwandeln, das würde den Kontrollerteil überhaupt nicht beeinträchtigen.
Ja, diesen Teil der ORM-Funktionalität kann man direkt in die Modell-Klassen hineinschreiben. Es ist eben eine recht aufwendige und auch langweilige Angelegenheit ;-)
Jau, das war das, was mir nicht "geheuer" war. Aber bei Hibernate ist ja ein guter Hinweis, was zB. etwaige Methoden, Parameter und Namenskonstrukte angeht.
Model model = XMLSerialization->read(file);
Benutzer name = model.getBenutzer("name");
...
XMLSerialization->write(model, file);Der Kohäsion wegen?
Nein, der Abstraktion von der Art der Serialisizerung bzw. von der Art des Modells.
Aber doch auch der Kohäsion wegen, oder? Das Model soll einen Benutzer rausrücken können, aber es muss nicht wissen, wie er gespeichert ist. Sind das nicht zwei Aufgabenbereiche?
Die Modellklassen beschreiben die Struktur, Beziehungen etc.
Die Serialisierungsschnittstelle (einen Standardbegriff gibt es dafür irgendwie nicht)
komisch...
implementiert das speichern und laden beliebiger Modelle.
Genau. Der sag ich, wie das Model heißt, und dann macht die Schnittstelle los und bringts mir von irgendwo. Mir doch egal von wo.
Wenn ich XPath- oder SQL-Queries direkt in meinem Modell habe, dann binde ich damit das Modell ja an die Datenbank, den XMLParser etc. Außerdem muss ich das für jedes Modell neu machen.
Jau, der Groschen scheint jetzt gefallen zu sein.
Wenn ich eine Bibliothek habe, die Modelle auf Datenbanktabellen oder XML abbildet, kann ich diese für jedes Modell verwenden. Außerdem kann ich eine Instanz eines Modells in verschiedenen Resourcen abspeichern.
dit.
Warum Singleton? Statische Klassen kennt Java auch?
Ja, statische Methoden gibt es natürlich auch. Würde auch gehen. Singletons erzeugen eben immer noch Objekte, die man auch so per Referenz weiter geben kann, dadurch muss man nicht gleich allen Code fest an die globale Information binden.
Ich dachte Singleton erlaugt nur _eine_ Instanz. Deshalb brauch ich das Objekt nicht weiterzugeben, weil mir ja MySingelton::getInstance() immer den aktuellen Zustand des Objektes liefert. So scheint mir das zumindest beim FrontController im ZF zu sein. Objekte werden ja _immer_ per Referenz übergeben ab PHP 5.
Streng genommen könnte man sagen, dass das Dateisystem mit zum Modell einer Desktopanwendung gehört.
Ah, zum Verständnis ist "streng genommen" immer gut (;-).
De Marco 1975
Ach der, naja über das Thema kann man endlos philosophieren und es wurde auch getan und viele tun es immer noch ;-)
Also doch Philosophie. Gut. Einverstanden.
http://de.wikipedia.org/wiki/GRASP
Hm, das scheint eine Mischung aus bekannten Konzepten zu sein.
Ein bisschen Coupling/Cohesion, Entwurfsmuster und MVC. Das entsprechende Buch ist erst von 2004. Vielleicht ist es eine schlüssige Gesamtdarstellung oder es ist nur ein neuer Aufguss alter Konzepte. In diesem Bereich gibt es sehr viel von Letzerem ;-)
Ein Philosophieprofessor höre ich noch dunkel in Erinnerung sagen, Habermaß oder sonstwer hätte behauptet, Philosophie sei nix weiter als Aristoteles und Plato zu kommentieren. "Weisheitsliebe" ist wohl die direkte Übersetzung aus dem Griechischen.
Dank und Gruß,