Die modellgetriebene Entwicklung (englisch: Model Driven Architecture, MDA) geht einen Schritt weiter und erstellt nicht nur ein Code-Grundgerüst aus einem UML-Modell, sondern ein vollständiges Softwaresystem. MDA, welches ein weiterer OMG-Standard ist, erweitert die UML hierzu zu einer formal eindeutigen Modellierungssprache. Das Modell ist von Plattform oder Programmiersprache unabhängig. Ein Generator erzeugt den Code für die jeweils gewünschte Zielplattform, beispielsweise Apache, MySQL und PHP. Erklärtes Ziel der modellgetriebenen Entwicklung ist die Programmierung auf einer abstrakteren Ebene als zuvor: Eine Geschäftslogik soll so nur einmal als MDA-Modell spezifiziert werden müssen. Durch Weiterentwicklung der Generatoren soll das MDA-Modell auch auf zukünftigen Plattformen in entsprechenden Code überführt werden können.
UML2PHP ist das erste Werkzeug für die modellgetriebene Entwicklung mit PHP. In der ersten Stufe unterstützt UML2PHP die Generierung einer lauffähigen PHP-Anwendung aus den Klassendiagrammen eines (beispielsweise mit Poseidon for UML erstellten) UML-Modells. In späteren Versionen sollen auch die Anwendungsfall-, Aktivitäts- und Sequenzdiagramme des Modells berücksichtigt werden.
Bei der Code-Generierung erzeugt UML2PHP für jede Klasse des UML-Modells eine Geschäftsobjekt-Klasse. Objekte dieser Klasse werden persistent (ähnlich wie bei Propel, siehe Kapitel 12) in einer relationalen Datenbank gehalten und können über automatisch erzeugte und verarbeitete Formulare angezeigt und editiert werden.
Die generierte Anwendung nutzt eine mitgelieferte Klassenbibliothek. Diese übernimmt unter anderem Datenbankabstraktion, das Speichern von PHP-Objekten in einer relationalen Datenbank, Benutzer- und Rechteverwaltung sowie Formularverarbeitung und Session-Verwaltung.
Abbildung 14.3 zeigt ein UML-Klassendiagramm für eine Rezeptsammlung. Für diese Sammlung verwalten wir eine Liste von Rezepten sowie eine Liste von Freunden, von denen wir die Rezepte erhalten haben.
Abbildung 14.4 zeigt den "Application Wizard" von UML2PHP. Hier laden wir das mit Poseidon for UML erstellte UML-Modell (Abbildung 14.3) und legen Einstellungen für Datenbankverbindung sowie Ausgabeverzeichnis fest. Durch Drücken des "Generate"-Knopfes wird eine vollständig funktionsfähige PHP-Anwendung erzeugt sowie die entsprechenden Tabellen in der angegebenen Datenbank angelegt.
Wenn wir die generierte Webanwendung im Browser öffnen, so können wir nach Eingabe der Logindaten ("admin", "admin") einen Datensatz für einen Freund (Abbildung 14.5) sowie ein Rezept (Abbildung 14.6) eingeben.
Das Rezept verknüpfen wir über das Feld "myFriend" mit dem zuvor angelegten Freund-Datensatz.
Nachdem wir einen Freund sowie ein Rezept in die Datenbank eingetragen haben, können wir uns die Daten im Überblick anschauen (Abbildung 14.7).