Bevor ich meinen neuen Entwurf erkläre, der übrigens auf Entwurf Nr. 2 basiert – ich habe also nicht wieder alles verworfen -, möchte ich eine Analogie voranstellen:
Anfängliches Programmieren ist wie Gartenhäuschen bauen
Gutes Pogrammieren ist wie schöne, verzierte Gartenhäuschen bauen
Professionelles Programmieren ist wie Hochhäuser bauen
Weiterlesen „Phlame Engine: Entwurf Nr. 3“
Ich bin ja dabei ein Framework zu schreiben… oder zumindest den Teil eines Frameworks.
Framework.. vor ein paar Monaten hab ich noch Gedacht damit ist der Plan oder die Vorgehensweise für ein Projekt gemeint, dem ist aber nicht so. Ein Framework ist eine Bibliothek aus Scripten, auf der man ein Projekt aufbauen kann. Dies beinhaltet vor allem Grundfunktionen und geben bereits eine MVC Struktur vor.
Nun ein paar Frameworks, die ich mir angesehen habe:
Das Zend Framework erschlägt mich fast mit seinem Umfang. Es führt auch sehr viele Sachen, die ich überhaupt nicht brauche. Es ist meiner Meinung nach ein Schwergewicht. Ich habe keine Tests gemacht, aber ich kann mir denken, dass das ganze trotz direkter Einbindung auf dem Server (keine PHP Scripte) nicht so performant wie ein kleines leichtgewichtiges Framework ist. Ich verwende es aus dem selben Grund nicht, wieso ich Smarty nicht verwende – ich brauche diese Schwerfälligkeit nicht, so praktisch sie auch sein kann, sondern brauche etwas Leichtgewichtiges, das gut auf meine Zwecke zugeschnitten ist.
Das PHP Framework symfony gefällt mir schon besser, obwohl die Dokumentation nur auf Englisch ist. Vor allem ist ORM mit Propel möglich. Nach näherem Hinsehen kann Propel zwar einiges, was ich gebrauchen könnte oder selbst gar nicht schöpfen werde/würde, doch eine sehr wichtige Eigenschaft fehlt mir: Row-Level-Locking, ein Schreibschutz auf bestimmte Tabelleneinträge, der auf InnoDB Tabellen in MySQL viel besser ist als das bekannte „LOCK TABLES“ auf MyIsam Tabellen. Aus diesem Grund kann ich Propel, mit oder ohne Symfony nicht verwenden.
Ich falle zurück auf die Idee ein eigenes, sehr leichtgewichtiges Framework zu schreiben.
ORM wird größtenteils den Kern meines Frameworks darstellen.
Nur, was ist ORM? [Ich meine hier übrigens nicht Objekt Role Modeling, das auch ORM abgekürzt wird]
Ich muss vorwarnen, das wird jetzt wahrscheinlich für den Großteil der Blogleser unverständlich. Es gehört wohl zu den Tiefen des Programmierens, neben den Entwurfsmuster. Oft wird hier mit Fremdwörtern nur so um sich geschmissen. Ich habe immernoch so meine Probleme, so lange mache ich das ja noch nicht. Ich werde mich trotzdem bemühen es einfach auszudrücken.
Relationale Datenbanken, wie MySQL, legen Daten in Tabellen ab. OOP arbeitet aber mit Objektinstanzen. ORM soll nun das Zwischenstück bilden, das die Objekte in der Datenbank abbildet. Ich möchte mittlerweile nurnoch mit Objekten arbeiten, es vereinfacht das Programmieren ungemein. Ich möchte vor allem Spielelemente wie Flotten als Objekte verwalten, um besser Interaktionen zu überblicken. Doch bevor man sich bei jedem Objekt mit dem Speichern in der Datenbank herumschlagen muss, möchte ich das lieber in verschiedenen (Abstraktions-)Schichten verstecken. Für die „Community-Entwickler“, die hoffentlich nach Fertigstellung des Frameworks tatkräftig mithelfen ein Spiel zustande zu bringen, bedeutet dies, dass ein Haufen Arbeit wegfällt. Dafür müssen sie sich halt mit (relativ einfachen) Klassen herumschlagen, was sie vielleicht von PHP noch nicht gewöhnt sind.
Ganz nebenbei wird dann übrigens gecacht und Race Conditions umschifft, ohne dass man etwas davon mitbekommt. OOP hat den großen Vorteil, dass man anderen Code nicht kennen muss, man muss nur wissen was er tut, und dafür gibt es die Dokumentation.