Unterschied zwischen Controller und Model in MVC
Ich bin etwas verwirrt über controller-und model in MVC-Frameworks (codeIgniter). Seine für mich klar, dass controller-Methoden-Aufrufe der Ansichten und Modell-Methoden-interagieren mit der Datenbank.
Aber, ich bin ein wenig verwirrt über die folgenden Arten von Methoden, die aufgerufen werden, indem die Methoden in einem controller.
hash_password //returns hash password.
valid_email //validates email format and return true or false
is_logged //check if session has a variable, returns true or false
generate_random_string //generates and hashes a random string
Sollten Sie platziert werden, im controller oder im model?
Derzeit Stelle ich alle der oben genannten Funktionen in einen controller. Ist es richtig?
- Ich denke, wie das Passwort gehasht behandelt werden sollten, durch das model, denn das model weiß, wie das Passwort gespeichert werden soll. Und vielleicht sollte das Letzte sein, in eine helper-Datei. Nicht sicher über den rest.
- Wohl konnten Sie alle gehen in das Modell, Rückgabe von true/oder die Daten falsch sind, und ermöglicht Ihrem controller umleiten, wie erforderlich, auf den Anspruch, die "skinny Controller, fat-Modelle". Ich würde geneigt sein, zu gehen mit
model
,model/helper
,(base) controller
,helper
aus persönlicher Präferenz.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, die
is_logged
sollte im Modell platziert fürUser
. Beachten Sie, dass dieUser
könnte ein Kunde in Ihrem Fall oder für jede Klasse, die Sie vorgenommen haben, zu Modell ein Benutzer des service.Den
valid_email
undgenerate_random_string
sind mehr oder weniger utility-Funktionen, die Sie können in einemUtility
oderUtilities
Modell, so dass diese wiederverwendbar, in verschiedenen Steuerungen in der Anwendung.Den
hash_password
, montiert werden kann, entweder dieUser
Modell oderUtility
Modell. Ich bin mehr geneigt, um es inUtility
Modell, da es ein Hash-Funktion, und es gibt nichts, was die user interessiert. Allerdings kann ich mir vorstellen, es kann sein argument(s) sonst.Folgende Frage ALSO (obwohl für einen anderen Rahmen) kann auch als Faustregel:
Wohin mit den custom-Funktionen in Zend Framework 1.10
Regel-Controller verwendet werden, um zu bestimmen, wie man mit den http-requests gemacht..
Es ist nichts falsch bei der Erstellung einige Funktionen, die direkt reagieren, um die http-requests.
aber wenn es nichts zu tun hat mit der DB, ist es besser, diese Funktion in das Modell, und rufen Sie den controller.
Controller kombinieren view mit dem Modell, so dass jede Validierung shoulde im Modell platziert werden
das ist mein Beispiel von kohana
CONTROLLER
MODELL
Sicht nicht so wichtig ist, warum ich nicht das hier.
Allgemein gesprochen - ein Modell in weiß Sachen über Sie die eigenen Daten. Also alles, was mit rein, um ein Modell der eigenen Daten - sollte gehen in das Modell ein.
ZB die hash_password und E-Mail-Validierung von Methoden - ein model sollte wissen, wie Sie überprüfen oder ändern der eigenen Daten-Felder, also die sollte gehen in das Modell ein.
Aber ein controller sollte wissen, über wie direkte Aktionen des Anwenders angemessen und laden Sie die richtigen Modelle für Ansichten etc.
Z.B. die session-bezogene Methode gehen sollte in der Steuerung, da die Sitzung wird für die Speicherung der Benutzer-Zustand (basierend auf Handlungen in der Vergangenheit).
Den "generate random string" - Methode ist sehr vage und kann überall eingesetzt werden. Ich würde mal sagen, dass in einer separaten Bibliothek enthalten möglicherweise in die Modell - /controller-als angemessen.
Habe ich mit Codeigniter für eine lange Zeit und ich das machen würde, die folgenden mit Ihren Funktionen so weit wie die Platzierung geht:
Ich würde etwas wie einen Passwort hasher, in einer Bibliothek oder Helfer-Datei, so konnte ich rufen es von meinem controller, wie:
Ich nehme an, Sie wollen die hash/salt, Passwort und speichern Sie in Ihrer Datenbank in diesem Beispiel
Dies ist bereits in form_validation, so...
Diese sollte auch eine Verbindung mit einem Authentifizierungs-Bibliothek
Wieder, dieser würde kommen, aus einer Bibliothek oder Helfer.
SO, WENN TUN SIE VERWENDEN EIN MODELL???
Mich, ich Modelle, die ausschließlich für in/out auf der Datenbank. Alle meine Fragen dort zu gehen. Normalerweise habe ich mein Modell, die Funktionen zurückgeben von Daten-Objekten, so kann ich eine Schleife in meinen Ansichten.
Controller rufen Sie die Daten aus Ihrer Modelle, dann werfen Sie alles in Ihren Ansichten. Außerhalb Funktionalität geht immer in Bibliotheken und Helfer. Ich mag die "MY_library" und erweitern Codeigniter eigenen Zeug - vor allem mit den Formen und der html-helper usw.