Vollständige Version anzeigen : Modul oder Controller oder Action - Wann verwendet man was?
Ich würde gern mal über die Entscheidung diskutieren, wann man ein Modul, ein Controller (im Standard Modul "default") oder eine Action (auch im default Modul) implementieren sollte.
#1 Beispiel - Hilfe Seite:
Es soll eine Unterseite angeboten werden, wo z.B. die FAQ oder sonstige Hilfen angeboten werden. Wie entscheidet ihr, ob ihr dies als Modul, Controller oder nur als Action implementiert?
Glîndûwath
14.03.2008, 14:21
Ooooh das ist ein toller Thread, der gefällt mir *applaus* :)
Zu deinem Beispiel #1 würde ich spontan einen Controller vorschlagen. Ein Modul würde ich einsetzen, wenn etwas quasi eine eigene kleine Anwendung ist, wozu ich mehrere Controller benötige - und ich möchte das Modul vielleicht in einem anderen Projekt auch wieder einsetzen. Anmerkung: Bisher habe ich noch nie mit Modulen gearbeitet, deswegen kann das auch totaler Käse sein.
Wenn du einfach nur eine einfache Hilfeseite hättest haben wollen, hätte ich gesagt, mach ne Action draus - z.B. im IndexController ne helpAction(). Da du aber vermutlich mehrere "zusammengehörige" Hilfe-Funktionen haben wist (faqListAction(), helpAction(), ...) hätte ich nen HelpController erstellt mit eben diesen Actions.
Jo, so würd ich's spontan machen.
KingCrunch
14.03.2008, 14:29
Ist es eine Seite oder der Inhatsbereich einer Seite? Dann klar Controller. Schließlich sollte sie direkt aufrubar sein. "Modul" passt übrigens nicht in deine Auflistung, weil Module "nur" Zusammenfassung von Anwendungskomponenten ist. Ob nun etwas ein Controller oder mehrere Controller in einem Modul sein sollte, entscheidet der Umfang, bzw der Zusammenhang zu eventuell anderen Komponenten (Plugins)
DennisBecker
14.03.2008, 15:04
EIne gute FAQ mit Suchfunktionen, diversen Kategorien und Artikeln würde ich als eigenes Modul implementieren. Wenn ich mir die FAQ's anschaue, die ich zuletzt gebaut habe, würde ich bei einem Controller viel zu shcnell die Übersicht verlieren ...
Von was hängt die Entscheidung also allgemein ab? Ich habe mir notiert:
- Soll die Funktionalität direkt aufrufbar sein oder lediglich integrierbar sein?
- Wie komplex ist die gewünschte Funktionalität?
ich pack "grund" funktionen in das default modul.
login/logout, impressum, kontakt ... sowas halt.
alles andere bekommt ein modul in der regel (news, forum, mail, blog, upload/download) alles was man "kapseln" kann bekommt ein modul, und je nach umfang dann controller (index controller enthält z.b. oft nur list optionen - list_latest_news, show_current_news usw) sowas wie add/delete und ähnliches kommt in einen eigenen controller.
Mr.AndersoN
14.03.2008, 18:35
Ist schwer, das zu definieren.
Ich schaue, was für Funktionen ich brauche und wie sich diese logische bündeln lassen. Je nach Umfang kommt am Ende eben nur eine Action, oder ein Controller oder eben ein Modul bei raus.
Das ganze ist aber wieder recht abhängig von den Anforderungen, die die jeweilige Applikation stellt.
Eine Benutzerverwaltung kann zum Einem als Modul implementiert werden, aber genauso gut auch als Controller. Das kommt dann eben auf den Funktionsumfang an, die die Benutzerverwaltung mitbringen soll.
Ich hab im Default-Modul beispielsweise ein Auth-Controller. Genauso gut könnte man aber auch einfach eine login/logout-Action in den Index-Controller vom Standardmodul packen. Ersteres finde ich aber als logischer, da es ein eigenständiges Objekt darstellt, dass eben nur 2 Zustände einnehmen kann.
ich pack "grund" funktionen in das default modul.
login/logout, impressum, kontakt ... sowas halt.
Meine erste Umsetzung für Login/Logout Funktionalität war ein eigenes Modul "auth". Mittlerweile bin ich davon weg und auf einen Controller des Moduls "user" umgestiegen. Ich denke da macht es Sinn, weil ein Login/Logout einen User Account vorraussetzt.
Es macht aber auch Sinn, diesen controller in das default Modul zu stecken, wie du es gemacht hast. Allerdings würde ich das nur tun, wenn man einen allgemeinen Account zur Verfügung stellen möchte, sowas wie Anonymous oder einen einzigen Account zur Administration der Seite.
alles andere bekommt ein modul in der regel (news, forum, mail, blog, upload/download) alles was man "kapseln" kann bekommt ein modul, und je nach umfang dann controller (index controller enthält z.b. oft nur list optionen - list_latest_news, show_current_news usw) sowas wie add/delete und ähnliches kommt in einen eigenen controller.
Da würde ich noch feiner differenzieren, z.B. zwischen News, Blog und Mail. Aber klar, letztlich spielen wieder grundlegende Faktoren die entscheidende Rolle: Komplexität der Funktionalität und (in)direkter Aufruf.
Aktuell tendiere ich zu der Ansicht, viele (nicht alle, sowas wie Login/Logout eben nicht, wie oben beschrieben) Standardfunktionen bzw. global angezeigte Seitenelemente als Controller innerhalb des default Moduls umzusetzen. Jetzt muss noch die Entscheidung darüber reifen, wann eine einfache Action mehr Sinn machen würde.
vBulletin® v3.6.12, Copyright ©2000-2010, Jelsoft Enterprises Ltd.