Das Framework
Wir programmieren auf Basis von PHP und MySQL. Ein Framework ist ursprünglich eine Zusammenstellung von Funktionen innerhalb einer Programmiersprache, organisiert nach Anwendungsthemen und mit einer gewissen zusammenhängenden Gesamtstruktur. Nach und nach haben sich Frameworks aufgrund ihrer Beliebtheit zu komplexen Gebilden weiterentwickelt, die zudem Zusammenhänge wie Controller/Actions, Views und Datenlayer (MVC) abbilden und normalisieren. In den meisten Fällen profitieren die Frameworks dabei großzügig von den strukturellen Vorteilen der Objektorientierung (OOP).
Ein Framework soll es erleichtern, neue Projekte zu erstellen und sie im Laufe der Zeit konfliktfreier zu erweitern und zu pflegen. Weiterhin kann durch Verwendung eines offiziellen Frameworks sichergestellt werden, dass die Framework-Integrität ständig durch den Framework-Anbieter ergänzt und verbessert wird, ohne dass man notgedrungen das eigentliche Projekt immer wieder mitziehen muss. Man aktualisiert einfach das Fundament, davon profitiert die gesamte Anwendung.

Grundlage für eine Webanwendung mit hohen Ansprüchen an moderne Technologie, Performance & Stabilität, Sicherheit, Modularität und Wartbarkeit etc, ist ein Framework, welches sich an aktuellen Standards in Aufbau, Workflow und Formatierung orientiert und darüber hinaus ständig aktualisiert und verbessert wird. Nicht zuletzt spielt der Umfang der zur Verfügung gestellten Funktionen eine gebührende Rolle. Nach verschiedenen praktischen Fehlgriffen haben wir uns letztendlich für das Zend Framework entschieden. Es wird vom führenden PHP-Anbieter verwaltet und vermarktet, und bietet so verlässliche Aktualität zur Programmiersprache und der zukünftlichen Bestandhaftigkeit. Außerdem schneidet es in Umfragen und Benchmarks regelmäßig durchschnittlich gut ab.
Im Folgenden möchten wir Dir ein paar der wichtigsten technischen Features vorstellen, die wir aus diesem Framework verwenden:
- Module: Die Hauptfunktionen des Spiels lassen sich hervorragend in Modulen des Frameworks, sogenannten Applikationen abbilden. So gibt es also jeweils ein Modul für z.B. Arena, Gladiatorprofil, Nachrichten oder Allianz. Jedes Modul verfügt über eigene Controller, Actions und Layout-Templates, was für größte Freiheit z.B. im Design sorgt.
- Datenlayer: Durch die Trennung der Logik zwischen Anzeige, Workflow und Datenverarbeitung gelingt es uns, Datenbankzugriffe in eigenständig "denkenden" Klassen zu kapseln, sie miteinander zu vererben oder zueinander agieren zu lassen. Beim erstellen von neuen Funktionen kann sich der Programmierer also mehr auf den Workflow konzentrieren, statt sich Gedanken um die Quelle, das Format und die Validität seiner benötigten Daten zu machen. Ändert sich die Struktur der Datenbank, sind Anpassungen im Code nur im Datenlayer notwendig. Das eigentliche Vorgehen der Datenabfragen wird durch das Framework generell stark vereinfacht und abgesichert.
- Layout: Es wird ein übergreifendes Layout verwendet, welches für alle Seiten des Spiels einen festen Grundaufbau durchsetzt. Jede Seite hat dennoch die Freiheit, aus dieser Struktur auszubrechen, wenn es das explizit wünscht. Vorteil dieses Vorgehens ist ein geringer Wartungsaufwand am Design, ein leichteres Durchsetzen von Standards im Aufbau und Funktion in allen Seiten, und nicht zuletzt die Vereinfachung von Anpassungen des Gesamterscheinungsbildes für z.B. Feiertage, Ingame-Worldquestevents oder Features wie z.B. Benutzerdefinierte Themes. Das Ganze basiert letztendlich auf der smarty-Engine, welche von Webdesignern z.B. leicht verstanden wird.
- Context Switches: Das Framework kann in seiner Gesamtfunktion, aber auch für jede einzelne Action, in verschiedenen sogen. Contexts aufgerufen werden. Zu verstehen ist ein Context Switch wie eine Perspektive, aus welcher man das Spiel betrachtet. Je nach Perspektive erscheint das Spiel in einem anderen Licht: Die Ausgabe verändert sich. Diese Perspektiven können z.B. Handys, RSS-Reader oder Ajax-Requests sein. Auf diese Weise wird der Code des Spiels für diese Zwecke nicht unnötig aufgebläht und verfielfältigt, sondern alle Perspektiven finden ihren geordneten Platz innerhalb der MVC-Struktur und des Programmkonzepts.
- Translation: Auch wenn wir am Anfang natürlich aus Gründen der Menpower kaum mehrere Sprachen zur Verfügung stellen können, wird das Spiel mehrsprachig aufgebaut. Hierzu kommt ein eigens entwickelter Datenbankadapter für das Translation-Modul des Frameworks zum Einsatz. Dieser Adapter arbeitet im Backend mit MySQL Tabellen und im Frontend werden Import- und Exportscripte für die Tools der Übersetzer zur Verfügung gestellt, wie z.b. im Gettext-Format oder als CSV-Export. Der Adapter stellt darüber hinaus sicher, dass ein Cache unnötigte Datenbankabfragen verhindert und das nur für die aktuelle Seite benötigte Zeichenketten tatsächlich abgefragt werden. Hinzu kommen moderne Features wie z.B. plural support.
- Session-Namespaces: Allgemein sollte man natürlich verhindern, viele Daten in der Session vorzuhalten. Dennoch ist es unumgänglich. Doch das Framework hilft uns hierbei, indem es Namensräume zur Verfügung stellt, um die Sessionvaraiblen einfach und sicher auseinanderzuhalten. Es stellt dabei den Zugriff auf einen Namensraum sicher und verhindert, dass aus Versehen Werte eines anderen Moduls z.B. überschrieben werden. Außerdem hilft es bei der Implementierung von Mechanismen gegen Session Hijacking und korrupte Session-Identifikation.
- Cache: Eine zentrale Cachingklasse sorgt in allen Bereichen des Frameworks auf Wunsch dafür, dass Daten nicht unnötig oft ermittelt werden. Ob Templates, Zeichenketten, Form-Definitions, Datenbanktabellen-Metainformationen: Alles wird vom Cache im Dateisystem des Webservers vorgehalten, solange es sich nicht ändert. Richtig eingesetzt, ergibt dieses Feature einen spürbaren Performanceschub der gesamten Anwendung und trägt somit effektiv zur Spielerzufriedenheit bei.
- Rollen & Rechte: ACL wird im Zend Framework für unsere Bedürfnisse groß genug geschrieben. Wir definieren hier einzelne Rechte eines Benutzers, gruppieren sie zu Benutzerrollen und kombinieren das alles nach belieben. Das gibt nicht nur Freiheit für die Programmierer, sondern auch für den Spieler. Die Prüfung auf vorhandene Rechte, Vererbung und Ausschluss, und das Management derer, wird mit den Klassen des Frameworks zum Kinderspiel und muss keine Sorge der Entwickler mehr sein.
- Formulare: Betrachtet man ein Formular eher als eine Zusammenstellung von Eingabeelementen, statt einen Block aus HTML-Gestrüpp, leidet man besonders im fortgeschrittenen Zustand der Anwendung viel weniger unter Kopfschmerzen. Wir verwenden zum Aufbau, der Definition, der Validierung und Darstellung von Formularen eine Reihe von Klassen des Frameworks, die sich auf das Thema Formularverarbeitung spezialisiert haben. Grob gesagt ermöglichen sie uns das Arbeiten mit Benutzereingaben auf höchst dynamischem und sicherem Niveau, mit minimalster Anstrengung und kleinstem Pflegeaufwand.