9 Stimmen

MVC große Websites, einen Controller verwenden... oder viele?

Ich habe eine ziemlich große Website und bin auf der Suche nach einer möglichst zeitsparenden Methode, sie zu verwalten (ich bin der einzige Programmierer).

Ich versuche, eine sehr einfache MVC-Struktur zu entwickeln (ich will nicht einen Rahmen verwenden), um zu helfen, alle meinen Code in Ordnung zu halten.

Ist es bei einer großen Website besser, nur einen Controller zu haben, der alle Seiten verwaltet, oder ist es besser und einfacher, sie aufzuteilen?

Wenn nur einer, was ist ein gutes Beispiel für einen Nicht-Framework-Controller?

4voto

Tim Lytle Punkte 17229

Ich würde alle logischen Abteilungen in verschiedene Controller aufteilen - wenn es sich um statische Seiten handelt, dann mit demselben Controller "statische Seite" bedienen.

Wenn Sie einige statische Seiten haben, eine FAQ-Seite (oder einen Abschnitt), eine Produktliste - verwenden Sie einen Controller für jeden Abschnitt. Die statischen Seiten würden also von einem Controller aus Flat Files oder einer Datenbank gezogen werden, die FAQ-Seiten würden von einem anderen Controller aus einer FAQ-Tabelle generiert werden, die Produkte und Infos würden von der jeweiligen Quelle generiert werden, die dafür zuständig ist.

Verwenden Sie jedes Mal, wenn eine Seite generiert wird oder auf Daten zugegriffen wird, einen anderen Controller.

Natürlich kann die Klassenvererbung genutzt werden, um die Basisklasse mit dem Code zu erstellen, der für jede Controller.

Ich bin mir nicht sicher, was Sie mit einem Nicht-Framework-Controller meinen - ich würde das Zend (gasp) "Framework", das MVC-Muster und sogar den Controller selbst auschecken, kann unabhängig vom Rest des Frameworks verwendet werden.

4voto

Steven Mercatante Punkte 23557

Ich neige dazu, die Kontrolleure je nach ihrer Zuständigkeit für einen bestimmten Bereich einer Website/Anwendung aufzuteilen. Das macht die Pflege des Codes so viel einfacher. Außerdem gruppiere ich Controller (und Views, Models) in Modulen (Ordnern). Hier ist ein Beispiel aus einem aktuellen Projekt, an dem ich arbeite:

  • Blog

  • Beiträge

  • Kommentare

  • Kategorien

  • Einstellungen

  • Beiträge

  • Benutzer

Je komplexer eine Website ist, desto mehr Module verwende ich. Obwohl die meisten meiner Module nur einen "Index"-Controller enthalten, mag ich die Organisation, die sie bieten.

Dann verwende ich einen Router (Front-Controller), der einen REST-Stil URI auf das richtige Modul / Controller / Aktion zuordnet. Beispiel: mysite.com/blog/posts/view/7 würde Controller_Posts::view(7) aus dem Modul "blog" aufrufen. Ein zusätzlicher Vorteil der Verwendung von Modulen ist, dass ich spezifischere URIs haben kann, als wenn ich keine Module hätte. Obwohl ich vermute, dass dies durch die Verwendung eines Routers, der die Definition benutzerdefinierter Routen unterstützt, behoben werden könnte, aber das gefällt mir nicht so gut.

Wie bei vielen anderen Dingen auch, kommt es darauf an, womit man sich als Entwickler wohlfühlt, aber wir können uns wahrscheinlich darauf einigen, dass man mit mehr Organisation besser dran ist, solange man die Dinge nicht übermäßig kompliziert macht.

Nebenbei bemerkt, würde ich Ihnen empfehlen, ein Framework zu verwenden. Ich verstehe, wenn Sie nicht eines der bereits vorhandenen verwenden möchten, da ich diese auch vermieden habe. Ich habe schließlich mein eigenes geschrieben, das mir im letzten Jahr sehr gute Dienste geleistet hat. Es war eine großartige Lernerfahrung und es enthält nur das, was I wollen / brauchen. Davon abgesehen, möchten Sie vielleicht in Kohana und CakePHP aussehen - sie sind nicht übermäßig aufgeblasen IMO und sie werden definitiv sparen Sie Zeit, sollten Sie sich entscheiden, nicht zu schreiben, Ihre eigenen.

3voto

timdev Punkte 59971

Üblicherweise werden Controller in Controller für bestimmte Funktionsbereiche aufgeteilt.

Dann wird dem Ganzen ein "Front-Controller" vorangestellt, so dass es nur einen Einstiegspunkt in die Anwendung gibt. Die einzige Aufgabe des Front-Controllers besteht darin, eingehende Anfragen an den entsprechenden Controller weiterzuleiten.

Schauen Sie sich an, wie die Zend_Controller Komponente aufgebaut ist. Sie kann alles bieten, was Sie brauchen, und Sie können sie frei verwenden, ohne das komplette Zend Framework zu kaufen.

1voto

DisgruntledGoat Punkte 66021

Es hängt davon ab, wie die anderen Teile funktionieren werden. Wenn Sie nur eine Modelldatei haben, lohnt es sich wahrscheinlich nicht, den Controller aufzuteilen. Wenn Sie sowohl das Modell als auch den Controller in Abschnitte aufteilen können, sollten Sie das tun.

Ich finde jedoch oft, dass es zu viele Überschneidungen zwischen den Modellen gibt, um sie zu trennen. Sie haben vielleicht ein Modell für Artikel, aber wenn Sie die 20 wichtigsten Artikel in einer Seitenleiste auf anderen Seiten anzeigen möchten, sollte dieser Code im Artikelmodell enthalten sein - und das brauchen Sie auf jeder Seite.

Ehrlich gesagt kann man es nur ausprobieren und sehen. Beginnen Sie mit einem einzigen Einstiegspunkt, und wenn es zu, unhandlich wird, Refactor es in kleinere Stücke.

1voto

duffymo Punkte 298898

Ein Router/Dispatcher, viele Controller wäre mein Rat. Die Controller sollten auf URLs abgebildet werden, was unterschiedliche Funktionen bedeutet. Ein Controller wird mit verschiedenen Diensten zusammenarbeiten, um jeden Anwendungsfall zu erfüllen, so dass ein Controller für Ihre gesamte App zu unhandlich werden würde, wenn Ihre App mehr als eine Handvoll Anwendungsfälle hat.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X