Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
faecher:informatik:oberstufe:datenbanken:projekt:dokuwiki_plugin:microblogging:step01:start [20.06.2021 16:59] – [Objektorientierter Datenbankzugriff reloaded] sbel | faecher:informatik:oberstufe:datenbanken:projekt:dokuwiki_plugin:microblogging:step01:start [Unbekanntes Datum] (aktuell) – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Schritt 1: Grundfunktionalität ====== | ||
- | Zunächst soll die Grundfunktionalität implementiert werden: | ||
- | |||
- | * Benutzer sollen Einträge erstellen können. | ||
- | * Benutzer sollen die Liste ihrer Einträge angezeigt bekommen. | ||
- | |||
- | ===== Datenbankmodell: | ||
- | |||
- | Ein einfaches Datenbankmodell könnte zunächst so aussehen: | ||
- | |||
- | |||
- | {{ : | ||
- | |||
- | |||
- | ---- | ||
- | {{: | ||
- | === (A1) === | ||
- | |||
- | Erstelle Tabellen in deiner Datenbank, die dieses Modell abbilden. | ||
- | |||
- | ===== Vorbereitung der Codebasis ===== | ||
- | |||
- | Wenn man nun über die OOM unseres Projekts nachdenkt, macht es zunächst Sinn, dass man zwei Klassen verwenden möchte: | ||
- | |||
- | * '' | ||
- | * '' | ||
- | |||
- | Beide Klassen müssen auf die Datenbank zugreifen. | ||
- | |||
- | ---- | ||
- | {{: | ||
- | === (A2) === | ||
- | |||
- | * Könnte man für die Grundfunktionalität auch mit einer Datenbanktabelle und einer Klasse auskommen? | ||
- | * Warum könnte das das hinsichtlich der Erweiterbarkeit des Projekts ungeschickt sein, so zu beginnen? | ||
- | |||
- | ==== Refactoring des bisherigen Beispielplugins ==== | ||
- | |||
- | Um deinen Plugin-Code besser zu strukturieren und auf die kommenden Anpassungen vorzubereiten, | ||
- | |||
- | * Erstelle einen Commit mit einen aktuellen Änderungen, | ||
- | |||
- | < | ||
- | <script id=" | ||
- | </ | ||
- | |||
- | * Lege ein Unterverzeichnis '' | ||
- | * Verschiebe die Datei mit deiner Datenbank-Klasse in diesen Ordner und benenne sie um in '' | ||
- | * Passe das '' | ||
- | * Teste, ob der bisherige Stand der Entwicklung noch immer funktioniert. | ||
- | |||
- | ==== Automatisches Laden benötigter Klassendefinitionen ==== | ||
- | |||
- | Wenn künftig weitere Klassendefinitionen zu unserem Projekt hinzukommen, | ||
- | |||
- | Man kann das durch einen " | ||
- | |||
- | * Alle Klassen (und Interfaces) müssen in einer Datei '' | ||
- | * Die in den Dateien definierten Klassen müssen genau so heißen, wie die Dateien. Man darf also nicht die Klasse '' | ||
- | |||
- | Wenn man sich an diese Regeln hält kann man anstelle des '' | ||
- | |||
- | <code php> | ||
- | // Klassendateien mit Hilfe eine anonymen Funktion als | ||
- | // Autoloader einbinden | ||
- | spl_autoload_register(function ($class) | ||
- | { | ||
- | // DokuWiki arbeitet stets in seinem DocRoot, wir suchen die Dateien | ||
- | // aber in einem UVZ des Plugin-Verzeichnisses -anpassen wenn das | ||
- | // Plugin nicht " | ||
- | $plugin_dir=DOKU_PLUGIN . "/ | ||
- | |||
- | // Wenn eine Klasse oder ein Interface noch nicht existiert | ||
- | // soll versucht werden, die passende Datei zu laden. | ||
- | if(!class_exists($class) or !interface_exists($class)) | ||
- | { | ||
- | $file = $plugin_dir . ' | ||
- | // Wenn die Datei nicht existiert, Fehler ausgeben. | ||
- | if(!file_exists($file)) | ||
- | die (' | ||
- | // Wenn die Datei existiert, laden | ||
- | require_once($file); | ||
- | } | ||
- | }); | ||
- | </ | ||
- | |||
- | ---- | ||
- | {{: | ||
- | === (A3) === | ||
- | |||
- | Ersetze das Include-Statement durch den Code oben und versuche zu verstehen, was dieser macht. | ||
- | |||
- | Teste ob der Code tatsächlich automatisch Klassendateien nachlädt, indem du einen Fehlerfall, erzeugst: veruche dazu ein Objekt zu erzeugen, für das es keine Klassendefinition gibt, beispielsweise '' |