Thread Rostis Framework
(87 answers)
Opened by rosti at 2014-05-09 10:51
Quote Die Sourcen sind trivial. Von daher kommt es gar nicht darauf an, Sourcen offenzulegen sondern darum, den Aufbau und insbesondere den Sinn und Zweck einer objektorientierten Programmierung zu verstehen. Erster Punkt ist die Klassenbindung: Code: (dl
)
1 Beliebige HTML-Seiten mit c++ ausliefern Hierbei spielen Post/Get-Parameter noch gar keine Rolle. Die Klassenbindung ist nur die statische Route zur Klasse deren Instanz bei einen Request erstellt wird. Und diese Instanz schnappt sich weitere Eigenschaften die da konfiguriert sind wie Titel und Beschreibung einer Seite die der Server ausliefert. Sind Parameter im Spiel, also Nutzereingaben wie im nächsten Fall Code: (dl
)
1 VLSM CIDR Subnet-Calculator für IPv4 mit Perl ruft die Klasseninstanz eine Methode control() wo das Ergebnis kalkuliert und die Antwortseite zusammengestellt wird. Mit oder ohne Parameterverarbeitung, der Ablauf ist bei jedem Request stets derselbe. Also definiert mein FW ein Interface in Gestalt einer Handvoll Methoden die nacheinander immer in derselben Reihenfolge aufgerufen werden. Und in jeder dieser Methode hat die Instanz der an den URL gebundenen Klasse Zugriff auf alle zu diesem URL konfigurierten Eigenschaften. Und ja, ich habe mir auch andere Frameworks angschaut und dabei festgestellt, daß keines von denen so arbeitet. Insbesondere die Trennung von Code und Konfiguration und die konsequente Anwendung der objektorientierten Programmierung. Zweiter Punkt ist eine Factory. Erst gestern habe ich eine kleine Eweiterung geschrieben, den Einbau der Checksumme in einen Meta-Tag. Hierzu ist die Interface-Methode start_html() zuständig und in dieser Methode haben wir, wie in jeder anderen Methode die Instanz der gebundenen Klasse zur Verfügung. Also rufen wir mit dieser Instanz einfach die Methode checksum(): Code (perl): (dl
)
1 2 # checksum $stash->{checksum} = $self->checksum($ENV{HTTP_HOST}.$self->{URL}.$ENV{QUERY_STRING}); wobei die Methode checksum in einer dedizierten Datei definiert ist: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 # Datei checksum.pm use strict; use warnings; use Digest::MD5 qw(md5_hex); sub checksum{ my $self = shift; my $s = shift; return md5_hex($s); } 1; Was den Vorteil hat, daß im Falle einer Entscheidung ob eines anderen Verfahren der Checksummenbildung eben nur diese eine Datei anzufassen ist. Infolge der strikten Trennung funktionaler Methoden und Module und der Trennung von Code und Konfiguration ist das FW beliebig erweiterbar ohne Änderung der Core-Methoden. Möglich ist auch, die Interface Methoden browse(), init(), control() in einer dedizierten Datei zu definieren und dieses Interface per Konfiguration einem URL als Eigenschaft zu verpassen: Code: (dl
)
1 class: DBFileResponse Was diesen URL im Nachhinein zur Verarbeitung von Benutzereingaben (Post/Get) befähigt. Ebenso ist es auf diese Art und Weise möglich über Platzhalter (jede Seite ist ein Template) dynamische Inhalte in beliebige Seiten einzubauen ohne den Code in HTML einzubetten (was embed Perl und PHP machen). Lust auf Framework? Nur zu. Alles was Sie brauchen ist eine gute Idee ;) View full thread Rostis Framework |