Ich habe eine Tabelle namens Cat
und eine PHP-Klasse namens Cat
. Jetzt möchte ich eine CatDataMapper
-Klasse erstellen, damit Cat CatDataMapper
erweitert.
Ich möchte, dass diese Data Mapper-Klasse grundlegende Funktionen zur Durchführung von ORM und zum Erstellen, Bearbeiten und Löschen von Katzen bereitstellt.
Zu diesem Zweck könnte jemand, der dieses Muster sehr gut kennt, mir einige nützliche Ratschläge geben? Ich finde es etwas zu einfach, einfach einige Funktionen wie update(), delete(), save() bereitzustellen.
Ich erkenne ein Problem bei einem Data Mapper: Zuerst erstellt man die Instanz von Cat, dann initialisiert man alle Variablen wie Name, Fellfarbe, Augenfarbe, Schnurren, Miauen, Pfleger usw. und nachdem alles eingerichtet ist, ruft man die save()-Funktion auf, die von CatDataMapper geerbt wurde. Das war einfach ;) Aber nun das eigentliche Problem: Wenn man die Datenbank nach Katzen abfragt, erhält man einen einfachen, langweiligen Datensatz mit vielen Katzen-Daten zurück.
PDO bietet einige ORM-Fähigkeiten, um Cat-Instanzen zu erstellen. Nehmen wir an, ich benutze das, oder nehmen wir sogar an, ich habe eine mapDataset()-Funktion, die ein assoziatives Array akzeptiert. Sobald ich jedoch mein Cat-Objekt aus einem Datensatz habe, habe ich redundante Daten. Gleichzeitig könnten zwanzig Benutzer dieselben Katzen-Daten aus der Datenbank abrufen und das Katzenobjekt bearbeiten, d.h. die Katze umbenennen und speichern(), während ein anderer Benutzer noch darüber nachdenkt, eine andere Fellfarbe festzulegen. Wenn alle ihre Bearbeitungen speichern, ist alles durcheinander.
Äh... ok, um diese Frage wirklich kurz zu halten: Was ist hier die bewährte Praxis?