Hallo Norbert,
im aktuellen Post möchte ich nun auf
Teil III deines Posts zu sprechen kommen:
Ich halte meine Fragen für relevant, weil es doch bei Eurem Test im Kern um das konkrete Projekt einer Mini-Test-Website ging. Und um das mit CakePHP zu bewerkstelligen, muss ich (1), (2) und (3) doch wissen.
Idee war es - wie unter
http://www.adventure-php-framework.org/ ... kVergleich,
1.4. Erstellen einer Webseite beschrieben - mit Hilfe der zur Verfügung stehenden Bibliotheken eine Webseite mit den dort beschriebenen Teilen zu erstellen. Es wurde dazu bewusst darauf verzichtet, genau vorzugeben, wie dieses zu bewerkstelligen sein muss, da man sich sonst u.U. den Fall produziert, dass die Vorgehensweise aus Gründen des Designs des Frameworks nicht möglich ist und damit die daraus resultierende schlechte Bewertung als ungerechtfertigt angefochten wird. Ziel der Betrachtung war es also eine Webseite mit jedem Probanden zu implementieren, die aus Benutzersicht den Anforderungen, die aufgezeigt wurden entspricht. Das ist auch letztlich das, was den Kunden interessiert. Ich weiß, dass ich in der letzten Aussage die "non-functional requirements" wie beispielsweise Performance unterschlagen habe, diese sind aber in einem eigenen Abschnitt bewertet worden. Aus meiner Erfahrung heraus interessiert sich der Benutzer herzlich wenig für das interne Softwaredesign und ist - sofern voll funktionsfähig und performant - auch mit einer Bastellösung zufrieden.
Anders sieht das natürlich dann aus, wenn man eine Basis für viele Applikationen und Webauftritte zu verantworten hat und die Anforderung besteht, dass Modul A sowohl in Projekt 1 als auch in Projekt 2 integrierbar und lauffähig sein soll und die Daten möglichs Projekt- und Applikations-übergreifend und nutzbar sein müssen. Ist das der Fall muss natürlich auf das Design der Gesamt-Software sehr wohl Acht gegeben werden.
Kommen wir also auf deine konkreten Fragen zurück. Ich beantworte die Fragen erst mal ohne Beachtung deiner weiteren Ausführungen um dir ein Gefühl für die Idee der Betrachtungen zu geben.
(1) wie denn z.B. ein dynamisches Menü mit CakePHP standardmäßig umgesetzt werden kann
Als Möglichkeit wurden hier Layouts, Views und Elemente genannt. Nach CakePHP-Philosophie ist das Standard und gilt somit auch für den Test. Würde das anders zu bewerkstelligen sein, würde sich der Test an diesen Standard angepasst haben. Ziel war es definitiv nicht, an das Framework-Core Funktionen hinzufrickeln, nur um ein Verhalten zu generieren, das man von einem anderen Kandidaten kennt. Anpassungen sollten lediglich im "user space"-Bereich passieren dürfen.
(2) wie Templates (Layouts, Views und Elemente) mit diesem Framework generell verschachtelt werden und
Das Verschachtelungsthema habe ich im Bereich des zentralen Layouts mit einem
- Code: Alles auswählen
<?php
echo $this->renderElement('menu');
?>
gelöst, was meiner Meinung nach einem Standard-Vorgehen von CakePHP entspricht. Das Generieren eines dynamischen Menüs wäre an dieser Stelle ein Ausflug wert gewesen. Hier gilt jedoch das bereits oben gesagte.
(3) wie eine Einbindung und Verschachtelung dynamischer View-Bereiche prinzipiell mit CakePHP erfolgen kann, denn Komponenten stellen hier nicht das Prinzip dar.
Für diesen Hinweis aus der Praxis bin ich dankbar, verstehe aber noch nicht so recht, warum. Wenn ich ein Gästebuch implementiere, dann muss dieses mit ein und der selben Code-Basis - natürlich anpassbar durch Konfigurationen - in einem anderen Projekt 1:1 lauffähig sein. In diesem Zusammenhang sind mir die Komponenten von CakePHP in's Aufe gefallen. Sollte es hier andere Möglichkeiten geben, so bin ich gespannt welche...
Anforderung dabei wäre, dass ich - in CakePHP-Logik gesprochen - einfach ein
- Code: Alles auswählen
<?php
echo $this->renderModule('guestbook');
?>
in eine Datei, die unter
/app/views/pages liegt einbaue und mein Modul beim Aufruf der entsprechenden URL funktioniert, ohne dass ich in einen Controller eingreifen oder andere implementierungstechnische Handstände vollführen muss.
Zu deinen Lösungen:Nachdem ich die Ideen und die damit verbundenen Fragestellungen nun dargestellt habe, möchte ich noch etwas zu den Beispielen - die ich im Übrigen sehr gut finde - noch einige Worte los werden: mir gefällt nach oben gesagtem die Möglichkeit (3) b) mit Abstand am besten, da ich an dieser Stelle genau die Möglichkeit zur Abstraktion habe, die sich ein Programmierer wünscht. Die Frage, die sich mir stellt ist jedoch, wie ich die Dateien, die mir das Newsmodul generieren strukturiere. Sinnvollerweise lege ich mir doch dafür unter
/app/views und unter
/app/controller eigene Unterverzeichnisse an um zu kennzeichnen, dass die dort aufbewahrten Dateien zum Modul News gehören. Oder wird hier vom
vendors-Thema Gebrauch gemacht und die Dateien, die zum News-Modul gehören dort abgelegt?
Vielleicht habe ich zum Thema CakePHP zu viel geschrieben, dies ist schließlich kein Cake-Forum. Aber wenn man nach Formulierungen sucht, dann stolpert man schreibend immer weiter, bis letztendlich drei Beiträge entstanden sind.
Nein, nein. Ich finde es sehr spannend die unterschiedlichen Konzepte zu diskutieren. Keinesfalls möchte ich hier Sitten einreissen lassen, die in anderen einschlägigen Foren Gang und Gäbe sind, nämlich Fremdprodukte ohne Sinn und Verstand vernichten oder schlecht reden zu wollen. Diese Art der Anfeindung ist mir an anderer Stelle (Zend Framework-Forum) wiederfahren, als ich während des Tests eine Diskussion eben über das Thema dynamische Inhalte, generische Strukturierung von Views u.s.w. führen wollte. Das wiederum wird hier
nicht der Fall sein und vor Allem nicht werden, da es schließlich darum geht mit den geeigneten Mitteln die Wünsche der Kunden zu befriedigen.
Im Nachhinein betrachtet ist aber der letzte Beitrag der wichtigste, denn hier geht es um die (wenn ich richtig verstanden habe) von Euch völlig zu Recht aufgeworfene Kernfrage:
Mit welchen Konzepten und Methoden unterstützt mich ein Framework bei der Umsetzung von komplexen, modernen Website-Layouts (mit oder ohne Ajax)?
Richtig, das unterschreibe ich mit. Webseiten leben von der Präsentationsschicht und einem ganzheitlichen Konzept eines Frameworks, wie ich diese generieren kann.
Wenn Du schreibst, dass "Alex und ich blutige Anfänger in Sachen CakePHP sind" (was mit Sicherheit übertrieben ist), dann ändert das aber nichts an meinem ehrlichen Respekt vor Eurer Arbeit: dem Aufbau eines eigenen Frameworks (!) und dem Anzetteln von notwendigen Diskussionen in der Community - neben der täglichen Erwerbsarbeit.
Danke für die herzlichen Worte! Es freut mich, dass es so ehrliche und offene Leute in der Szene gibt, die sich offen über ein Thema austauschen und eine sachliche Diskussion führen. Merci beaucoup!
Alex und ich sind sicher Anfänger im Bereich von CakePHP, haben jedoch fundiertes Wissen, was Software-Design im Allgemeinen und in Bezug auf das Design eines Frameworks angeht. Ich behaupte an dieser Stelle auch mal, dass ein Anfänger sicher nicht im Stande ist einen Vergleich zu ziehen, da er weder mehrere Alternativen noch allgemeine Software-Design-Richtlinien und OO-Konzepte kennt und versteht. Bei CodeIgniter oder dem Zend Framework würde ich das mit dem Anfänger aber auch wieder behaupten.

BTW: Warum bist du von CodeIgniter abgekommen?