Aufgaben und Termine verwalten mit PHP und MySQL

Eine DEMO zu einer klassischen Datenbankanwendung mit PHP und MySQL nach dem MVC Entwurfsmuster

Offene Aufgaben

ID Anlegedatum Ablaufdatum Tage verbleiben Zuletzt geändert Titel Beschreibung Dump
7 2019-12-27 15:46:35 2020-03-31 00:00:00 -1159 2019-12-29 12:38:34 Auto zur Durchsicht anmelden Welche Werkstatt steht noch nicht fest Modell
6 2019-12-27 15:40:57 2020-05-31 00:00:00 -1098 2019-12-28 13:47:47 Dachrinne saubermachen Unbedingt mit dem Nachbarn absprechen. Modell

Neue Aufgabe/Todo anlegen

YYYY-MM-DD oder D.M.Y

Eine Einsicht in die Erledigten Aufgaben gibt das Archiv.

Über diese Anwendung

Grundlage für diese Anwendung ist das Entwurfsmuster Modell/View/Controller (MVC). Verschiedene Sichten auf die Daten werden hierzu über verschiedene Templates erzeugt, hierzu werden die Template-Dateien eínfach zu Laufzeit ausgetauscht. Diese Vorgehensweise erweist sich zweckmäßiger und einfacher als umfangreiche Kontrollstrukturen innerhalb einer einzigen Template-Datei die bei mehreren zu erzeugenden Sichten (Views) schnell unübersichtlich werden kann.

Code der Anwendungsklasse ToDo

Untenstehender Code zeigt den Austausch zweier Template-Dateien, maßgeblich hierzu ist der Status welcher für den zu zeigenden Eintrag gesetzt ist. Sofern dieser Status closed heißt, ist der ToDo-Eintrag archiviert und demzufolge gibt es im Template auch kein Formular zum Hinzufügen von Aktivitäten.

Typisch für den MVC ist also, daß mit denselben Daten unterschiedliche Views erzeugt werden. Was auch gleichbedeutend mit der Zweckbestimmung für dieses Entwurfsmuster ist. Der Name der jeweiligen Templatedatei ist im HTML Quelltext /Headbereich hinterlegt. Untenstehend ein Code-Auszug aus dem Controller welcher die Benutzereingaben validiert über eine Parameterkontrollstruktur. Das Daten-Modell befindet sich in der Eigenschaft STASH.

# Parameterkontrollstruktur
else if($id = $this->param('show')){
    $this->_show($id);
    $file = $this->STASH['closed'] ? 'todo_archivedetail.html' : 'todo_detail.html';
    $this->STASH['file'] = $file; # für den HTML Kommentar
    $this->BODY = file_get_contents($this->TMPLDIR."/$file");
}

Das Daten-Modell in Class ToDo

Über den Link In der Spalte ganz rechts in obenstehender Tabelle können Sie einen Dump des Modells im Browser ausgeben. Je nach Bearbeitungszustand kann in ToDo-Item aus einem oder mehreren Datensätzen bestehen. Die Daten selbst sind in der Instanz der Modell-Klasse gekapselt welche die Daten referenziert.

Andere MVC-Implementierungen definieren die Daten in eigenständigen Objekten. Der Unterschied ist letztendlich der, ob die Daten eigene Methoden haben für Update/Insert usw. oder ob diese Daten über Methoden einer anderen Klasse bewegt werden. Abgesehen davon, daß Ersteres dazu führt, OOP zum Selbstzweck zu betreiben ist der praktische Nutzen eher fragwürdig insbesondere deshalb weil Eigenschaften dann an mehreren Stellen im Code zu definieren und zu pflegen sind, sich also Redundanzen ergeben die eine Skalierung erschwert.

Der Dump eines Models über einen der Links in obenstehender Tabelle zeigt die Daten unmittelbar vor dem Rendern in das HTML-Template. Dieselbe Datenstruktur kann ohne Änderung auch anderen Template-Engines (Smarty, Mustache usw.) übergeben werden. Somit ist die Wahl einer geeigneten Datenstruktur für den MVC eine praktische Frage die sich in erster Linie am Ausgabetemplate orientiert. Anpassungen am Template sind in Kürze erledigt ohne daß Code geändert werden muss.

Unterschiedliche Implementierungen eines MVC

Weitere Unterschiede in der Implementierung eines MVC ergeben sich hinsichtlich Datenfluss. Bei einem "echten" MVC werden die Daten direkt am Modell geändert und das Modell nach der Änderung zurück in die Persistierung geschrieben. Eine solche Vorgehensweise empfiehlt sich z.B. wenn die Daten im Browser/Client geändert und gehalten werden (JavaScript). Bei dieser Anwendung als Webanwendung jedoch werden nur die Änderungen übertragen und das Datenmodell ist stärker an MySQL gebunden, so erfolgt eben ein Update direkt im Persistierungs-Layer als ein SQL-Statement und das Modell wird erst nach einer Änderung erneut aus der Datenbank gelesen..

Schließlich werden infolge dieser festeren Kopplung an die Persistierungsschicht MySQL auch dessen Methoden genutzt wie z.B. ein Index oder Datum- und Zeitfunktionen. Bei einer losen Kopplung, einer strikten Trennung von Persistierungsschicht und Anwendung, also der Einführung eines Data Acces Layer wäre dieser Komfort komplett in den Methoden des Datenmodells nachzubilden.

Das Framework als MVC

Das eigentliche MVC ist hier das Framework selbst. So hat die Instanz der an den URL gebundenen Klasse sämtliche Methoden die es für einen Request-Response-Zyklus benötigt wobei diese Instanz auch sämtliche dazugehörigen Daten und weitere Objekte in ihren Eigenschaften transportiert.


Datenschutzerklärung: Diese Seite dient rein privaten Zwecken. Auf den für diese Domäne installierten Seiten werden grundsätzlich keine personenbezogenen Daten erhoben. Das Loggen der Zugriffe mit Ihrer Remote Adresse erfolgt beim Provider soweit das technisch erforderlich ist. s​os­@rolf­rost.de und wenn Sie möchten daß mein Prepaid nicht verfällt können Sie mich auch gerne anrufen 01625 26 40 76.