Heinrich Schiller  30.11.2018 11:08

Pre-Release, heinerCMS Version 0.9.0

In meinem letztem Beitrag schrieb ich kurz darüber, das ich die Datenbank meiner CMS-Software umstrukturiert habe und wie aufwändig es war. Danach wollte wieder eher kleine Updates schreiben und veröffentlichen. Für die Version 0.9.0 wollte ich eine Backup-Funktion machen, damit ich die Daten hin und wieder einfach sichern kann. Das hat den Hintergrund dass das CMS welches ich schreibe, ich auch bei meinem Webhoster verwende. Und zwar in einer "Entwickler"-Version. Das ist etwas seltsam weil die ganze Software noch in der Entwicklung ist. Die "Entwickler"-Version ist also eher als Entwicklungs-"Entwickler"-Version zu verstehen ^^'

Das wiederum erkläre ich mal später. Motiviert durch die Umstrukturierung der Datenbank, habe ich mich für die Umstrukturierung von heinerCMS entschieden. Die Version 0.9.0 soll also mit einer neuen Verzeichnisstruktur und neuem Codedesign kommen. Auf diesen Moment habe ich mich schon Monate zuvor vorbereitet, obwohl ich noch vor einem halben Jahr gar nicht wusste wie ich die Umstrukturierung letztendlich durchführen würde. Ein einmal in Form gegossener Code läßt sich nicht so einfach ändern, meiner Meinung nach. heinerCMS bot viele Code-Funktionen, die jedoch nicht "atomar" genug waren. Es waren eher Funktionen die mehrere Dinge auf einmal erledigten und somit zum Beispiel für eine Wiederverwendung eher ungeignet waren.

Das View und die Logik waren meist mit einander verschmolzen. Das heißt, man holte Daten aus der Datenbank und hat sie mit Hilfe von HTML sofort aufbereitet. Wollte man die SQL-Abfrage einer anderen Funktion nutzen, musste man die Abfrage zum Beispiel die Abfrage kopieren oder viel besser, in eine eigene neue Funktion auslagern. Letzteres habe ich überall in der Software mit der Zeit gemacht, die "zusammen geschmolzenen" Funktionen wieder zu "entschmelzen". PHP und HTML waren ebenfalls maskiert und verschmolzen, was ich auch wiederum trennte usw... Alle diesen "kleinen" Schritte waren dahingehend erfolgreich, weil sie die weiterentwicklung beschleunigten und vereinfachten. Dennoch gab es Probleme und auch Grenzen. Bedingt der Struktur bestand heinerCMS streng genommen aus 2 Programmen.

Ein Programm war dafür zuständig was der Besucher auf der Webseite sieht. Das andere Programm diente der Administration und erstellen von Inhalten. Das bedeutete eigentlich ein doppelter Code und auch doppelter Aufwand für die gesamte Software. Die Datenbankfunktionen waren je nach Umstand nicht sauber gelöst. Es gab Stellen im Code die dem Umstand geschuldet, viel größer, frickeliger und unübersichtlicher ausfielen. Was wiederum viel (überflüssigen) Code erzeugte usw. Für einen einzelnen Entwickler wie mir, der an solcher Software (in der Freizeit) arbeitet, ist das mit der Zeit ein ärgernis. Man wünscht sich eine Lösung und das man endlich sich auf die Aufgaben konzentrieren möchte, anstatt sich noch mit problematischen Altlasten und vielleicht damit verbundenen Workarounds abzumühen.

Das jetzige Ergebniss kann sich für mich sehen lassen. Aus zwei Programmen wurden eins. Programmteile wie Artikel, Download, Links usw. bekamen jeweils einen eigenen "Module"-Ordner. Hier liegen der Code und die jeweiligen HTML-Templates in ihrem eigenem spezifischen Ordner, anstatt das sie alle in einer PHP-Datei lagen. Lagen früher alle Funktionen noch in der admin_functions.inc.php, liegt jetzt der Artikel-Code im Ordner Artikel. Das selbe gilt für Downloads, Links usw. Das schafft vor allen Dingen eine bessere Übersicht und die einzelnen Module beeinflussen sich nicht mehr. Im großem und ganzen bin ich meinem internen Ziel schon ein großes Stück näher gerückt. Ursprünglich wollte ich dieses CMS in ein OOP überführen, ließ es aber am Ende des letzten Jahres als "unlösbar" zurück. Die Software ist zwar jetzt immer noch prozedural, der Code orientiert sich aber stark an das MVC und OOP. Viele Funktionen sollten jetzt "einfach" einen Platz in jeweiligen Klassen finden. Vielleicht wird das in paar Jahren, zu PHP 8 auch gemacht. Ich weiß es noch nicht.

Den Code habe ich heute von meinem "exp_struct"-Git branch in meinen "next"-Git branch gemerged. Die Software enthält noch ein paar grobe Fehler, funktioniert aber schon ganz gut. Jetzt geht es darum die letzten Schnitzer zu finden und zu eliminieren. Der Installer muss ebenfalls noch angepasst werden. Danach sollte einem merge ins "master"-Git branch nichts mehr im Wege stehen und damit einem Release 0.9.0.