Devblog 1 - MephitisCMS

    • Devblog 1 - MephitisCMS

      Devblog 1 - MephitisCMS
      [Blocked Image: https://feralbytes.ch/index.php?file=42&size=400]


      Geschichte

      Lange ist es her das die Entwicklung des Mephitis CMS begonnen hat. Wir können es nicht mehr genau datieren, es liegt aber Jahre zurück.
      Mephitis ist nicht das erste CMS von mir, es gab schon mal eins, dies war aber eher ein Lernprojekt. Nachdem das „Lernprojekt“ immer größer und komplexer wurde, stellten sich schnell einige Problemlösungen heraus die oftmals vorkamen: Formulare.
      Einige Zeit dümpelte so das „Lernprojekt“ vor sich hin und wurde schließlich aufgegeben.


      Anfänge bis Heute

      Mephitis wurde ursprünglich entwickelt, weil uns die damals und heute bekannten Content Management Systeme zu „überladen“ waren. Es sollte als schlankes und schnelles CMS das alte „Lernprojekt“ ersetzen.
      Es dauerte nicht lange und der Ehrgeiz war ergriffen, es wurden viele nützliche Dinge entwickelt:
      Das alte Modulsystem, automatische Formulare, eine einfache Datenbank API und das wohl wichtigste von allen: das Datenbanktool. Diese Werkzeuge automatisierten viele zeitraubende Dinge.

      Bis heute werden diese Werkzeuge und das CMS ständig erweitert und verbessert bis zu dem was technisch machbar ist.
      Technisch machbar deshalb, weil große Teile des CMS auf prozeduralen Code basieren. Nur neuere Teile wie z.B. die Navigation und das Datenbanktool sind teilweise objektorientiert.
      Der prozedurale Code ist zwar von der Performance her schnell, aber nur sehr aufwendig erweiterbar.


      Nähere Zukunft

      In der näheren Zukunft werde wir viele ältere Teile „refaktorieren“ also vom alten prozeduralen Code hin zur Objektorientierung.
      Besondere Aufmerksamkeiten werden bekommen:

      • Navigation und Inhalte
        • Altes System wird wegfallen
        • Es wird nur noch einen „Contenttree“ geben
          • Dieser wird Hand in Hand mit dem FCE System gehen, welches auch erneuert wird
      • Autoform
        • Dieses ist wohl das „Kernstück“ des CMS und wird komplett neu geschrieben werden
        • Komplett hin zur objektorientierter Programmierung
      • Cache
        • Wird erstmal für Bilder eingeführt werden
    • Nun sind wir mitten in der Entwicklung von Mephitis 2.0 und einige dieser Prophezeihungen wurden schon, beziehungsweise werden gerade erfüllt.

      Saphi wrote:

      In der näheren Zukunft werde wir viele ältere Teile „refaktorieren“ also vom alten prozeduralen Code hin zur Objektorientierung
      Der komplette Code ist nun objektorientiert.
      und das nicht nur in Form von Funktionssammlungen oder Singleton-Klassen. Dabei ist zu meinem bedauern auch kaum ein Stein auf dem Anderen geblieben. Ich habe respekt vor der Arbeit die vorallem auch du, Saphi, für den ersten Release dieses gewaltigen Projekts geleistet hast und in der ganzen Zeit, in der ich diesen Code hin zu Klassen und Objekten geformt habe, habe ich auch immer wieder gestaunt wie du es geschafft hast über all die vielen Funktionen in unzähligen Dateien den Überblick zu behalten und das ist wahrlich nicht als Kritik, sondern als Lob deiner Fähigkeiten zu verstehen. Ich kann zwar nicht so gut einschätzen wie leserlich oder elegant die neuen Strukturen auf andere Entwickler wirken, aber ich finde doch, dass sie nun durch den objektorienterten Stil noch ein gutes Stück nachvollziehbarer und wartbarer geworden sind, insbesondere wenn man das Projekt nicht vollständig kennt. und ich hoffe, dass das Ergebnis auch deinen Erwartungen entspricht.


      Auch wenn sich der Code ändert, bleiben die Ansätze oft die gleichen.
      Die Ideen und Konzepte hinter einiger deiner vorallem neueren Veränderung am System habe ich durchaus erkannt und ich denke wir haben bei der Umsetzung des aktuellen Codes diese Richtung auch beibehalten.

      Autoform
      Es mag seltsam erscheinen wenn ein ehemaliges "Kernstück" des CMS auf einmal in einer Art Bibliothek ausgelagert wird. MepInteract ist der Name jener Bibliothek die dem neuen CMS nicht mehr als Kern, sondern vielmehr als ein Teil des Fundaments dient. Dabei handelt es sich grob genommen immernoch um die alte Autoform-Funktionssammlung, nur eben in einer Klassenhierarchie verpackt und um einige Automatismen beraubt. Die Schwäche der alten Autoform-Komponente war ihre Komplexität, insbesondere da sie ein direktes Verbindungsglied zwischen Formulareingaben und Datenbank darstellte. Die damit verbundene Kontrollinversion war verwirrend. Die aktuelle Implementierung von MepInteract hat nun keinen Zugriff mehr auf die Datenbank und ist daher vom Umfang erheblich geschrumpft. An diese Stelle sind andere Mechanismen getreten, die den Datenbankzugriff vereinfachen.

      Navigation und Inhalt
      habe ich in der Version 2 bewusst getrennt gehalten. Die beiden Bäume zu kombinieren mag zwar dem Automatisierungswunsch entgegenkommen, ist aber verwirrend für den Benutzer und schafft ein ziemliches Durcheinander im Code. Auch sind beim Verknüpfen von Seiten mit Inhalten Referenzen deutlich flexibler und übersichtlicher als den kompletten Inhaltsbaum unter der Seite darzustellen.

      Assets und Caching
      Im Zuge der Javascript-Minimalisierung sind die Assets vorerst aus dem Code entfernt worden, auch um die Komplexität des Projekts zu reduzieren. Das heißt nicht, dass es nicht zu einem späteren Zeitpunkt sinnvoll sein kann, sie wieder zu beleben. Das Caching hingegen wird nun noch an weiteren Stellen angewandt.

      Templates
      sind der ursprüngliche Grund meines Beitragens zum Projekt. Ich habe schon zuvor für eigene Websites einen kleinen Compiler zur Trennung von HTML und PHP geschrieben, der durch striktes Trennen von Funktion und Design das Erstellen von Templates vereinfachen soll. In den Vorgängerversionen von Mephitis waren Code und Design jedoch derart stark miteinander verwoben, dass immer wieder neue Anpassungen an den Quellcode nötig wurden, bis hin zu dem Punkt, dass mir eine Reimplementierung des Projekts deutlich sinnvoller erschien.

      Der Umformungsprozess
      zog sich über mehrere Iterationen hin, sprich viele Teile des Codes wurden mehrmals neu geschrieben um möglichst elegante Lösungen zu finden. Ich möchte an dieser Stelle deutlich all jenen widersprechen, die von großen Konzepten predigen, die bis ins letzte Detail ausgearbeitet werden sollen. Der Code wird wesentlich raffinierter und eleganter, wenn man eine gewisse Intuition in die Programmierung mitnimmt, anstatt sich ewig an Planungen aufzuhalten und hinterher alles "runter zu implementieren". Ja, ich hatte bereits zu tun mit Leuten, die einem bestimmte Herangehensweisen aufdrängen wollen und möchte an dieser Stelle mal ausdrücklich betonen, dass ich einen Dreck auf solche Ansichten gebe.

      Ich würde mich jedenfalls freuen, wenn du doch wieder Zeit findest das Projekt mit weiter zu entwickeln, an guten Einfällen scheint es dir ja nicht zu mangeln, was man unschwer an Mephitis 1 & Mephitis 1.1 erkennen kann.