![]() |
| | Themen-Optionen |
| | Nach oben #1 |
| Christian Mühlroth Registriert seit: 04.09.2005 Ort: Nürnberg
Beiträge: 561
|
Nun ich weiß es is recht spät (fast 2), aber irgendwie kann ich um die Zeit erst richtig anfangen zu denken. Nun, ich hab mir heute mal das zu Gute geführt: Jetzt bin ich mir aber noch nicht ganz sicher, ob ich das Prinzip verstanden habe - oder viel mehr, wie ich dies nun konkret anhand eines Beispiels einsetzen soll. Nehmen wir uns folgende Situation: Vorhanden sind folgende Klassen: MySQL und Template Gewünscht ist natürlich folgendes Modell: Model-View-Controller Bei meinem Beispiel geht es um folgendes: Ein User bekommt eine ganz Index-Seite zu sehen, auf der diverst Daten ausgelesen werden wie welche User derzeit online sind, diverse andere kleinigkeiten, und dann ein Formular zum einloggen. Soweit, so gut. Schickt der User jetzt das Formular mit seinen eingegebenen Daten ab, so wird das zunächst mal vom Controller abgenommen (hier die Werte aus _POST). Der Controller kümmert sich (neben dem Einbinden der Konfiguration, ect) nun darum, was mit den Daten passiert. Indemfall müsste also erst eine Validierung der eingegebenen Daten stattfinden. Ja, und jetzt fängts bei mir an zu stocken. Um das zu machen, muss ich ja die Daten dem Model weitergeben. Ist das so gedacht, dass ich verschiedene Models hab (index.model.php, login.model.php, registration.model.php)? Ich glaube wohl eher nicht. Dann ist nun die Frage, wo denn meine ganzen Funktionen hinsollen (getOnlineUser(), validateAuth() etz) .. gehören die ins Model, und wenn ja, wie? Dass das ganze dann an den View weitergegeben wird ist nicht allzuschwer, dahinter hockt dann meine Templateklasse, die das alles aufbereitet und ausgibt. Mein Problem ist einfach das Verständnis, wo denn all meine benötigten Fuktionen hinsollen - in ein, oder mehrere Model (aufgetetilt nach Logik, natürlich)? Ich versuch mal etwas "Pseudo"-Code zu tippen (PHP4, da Kombatibilität bei meinem Projekt wichtig ist PHP-Code: Ich würde mich über eine kurze (von mir aus pseudocode-artige, aber dann bisschen detailliertere) Beschreibung eines ganz normalen LoginVorgans in Form eines MVCModels echt freuen.
__________________ http://www.ChrisDiary.De |
| | |
| | Nach oben #2 |
| me pro ok? Registriert seit: 07.09.2005 Ort: Pulheim bei Köln
Beiträge: 964
|
Deine Datenbankklasse ist das Model, bietet also den Zugriff auf persistente Daten, und die Templateklasse ist die View, sorgt also für die Ausgabe. Der Controller, in deinem Fall der Login, verbindet Model und View und macht einen benutzbaren Login draus. Er prüft erst im Model (z.B. in einer Session), ob der User schon angemeldet ist, danach wird die View angewiesen, entweder das Loginformular auszugeben oder ne Meldung ala "Schon eingeloggt, fu" oder whatever. Ist eigentlich ganz einfach. Stells dir wie nie umgedrehte Pyramide vor. Model (oben links), View (oben rechts), Controller (unten).
__________________ Gedanken aus Draht stricken einen Zaun. |
| | |
| | Nach oben #3 | ||
| Christian Mühlroth Registriert seit: 04.09.2005 Ort: Nürnberg
Beiträge: 561
| Zitat:
Zitat:
So wie ich das grad versteh - wo sind dann meine ganzen Funktionen wie validateLogin() ect .. im Controller?
__________________ http://www.ChrisDiary.De | ||
| | |
| | Nach oben #4 | ||
| me pro ok? Registriert seit: 07.09.2005 Ort: Pulheim bei Köln
Beiträge: 964
| Zitat:
Zitat:
Da ist natürlich viel Platz für Diskussionen, aber prinzipiell ist es so.
__________________ Gedanken aus Draht stricken einen Zaun. | ||
| | |
| | Nach oben #5 | ||
| Christian Mühlroth Registriert seit: 04.09.2005 Ort: Nürnberg
Beiträge: 561
| Zitat:
Zitat:
Model ist dann meine MySQL Klasse (wahrscheinlich kombiniert mit meinem SessionHandling, falls ich das explizit behandeln werde), und View meine Template-Klasse. Gut dankeschön, nun hab ichs doch entgültig verstanden. Dann war meine bisherige Version gar nicht mal weit von MVC entfernt.
__________________ http://www.ChrisDiary.De | ||
| | |
| | Nach oben #8 | |
| Christian Mühlroth Registriert seit: 04.09.2005 Ort: Nürnberg
Beiträge: 561
| Zitat:
__________________ http://www.ChrisDiary.De | |
| | |
| | Nach oben #9 | |
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.471
|
Falsch nicht. Wie ich hier schrieb Zitat:
| |
| | |
| | Nach oben #10 | |
| me pro ok? Registriert seit: 07.09.2005 Ort: Pulheim bei Köln
Beiträge: 964
| Zitat:
__________________ Gedanken aus Draht stricken einen Zaun. | |
| | |
| | Nach oben #11 |
| Erfahrener Benutzer Registriert seit: 30.10.2005
Beiträge: 279
|
Bin auch derzeit am MVC und hab auch irgendwie Verständnis Probleme. Hier mal Pseudo-Mischmasch-Code wie ichs machen würde...vielleicht ein E-Mail Formular. Model Mailformular, View sind templates und der Controller...der kontrolliert halt. So würd ich mir das jetzt vorstellen. Vielleicht schreibt ihr mir was dazu. Allerdings wüßte ich gern... ...wie man bei so einem Vorgehen am geschicktesten Exeptions einbaut und wie man z.b. weiterleitet beispielsweise mit header(); bzw wo das abgehandelt wird. Code:
// Hatte in dem PHP Solution Magazin irgendein
// Schnipsel gefunden in dem GET und POST irgendwie in einem Objekt
// sind allerdings find ich das heft grade nicht.
class requestobject {
public $data;
public __construct($_GET, $_POST) {
$this->data = array_merge...
}
}
class MailVersand {
private $mail, $tools, $db, $request = NULL;
public __construct() {
$mail, $tools, $db, $request = new;
}
public start {
$this->db-> "Hole Userliste"
$this->template->assign($users);
}
public ouput() {
$this->template->output();
exit();
}
public validate() {
$this->db "get usermail from table where id = $this->request->userid;
$this->tools->checkmail($this->request->usermail);
return TRUE;
}
public send () {
$this->mail->sendmail($this->request->usermail);
}
public finish() {
unset($this->request);
$this->template->assign('verschickt!');
}
}
new Mailer = Mailversand;
// Die Steuerung findet hier statt.
// Ist wohl geschickter als alles im Konstruktor abzuhandeln.
if(empty(Mailer->$request)) {
$Mailer->start;
$Mailer->output;
} elseif(is_array($this->$request)) {
$check = $Mailer->validate();
if($check) {
$Mailer->send();
$Mailer->finish();
$Mailer->output();
}
}
|
| | |
| | Nach oben #12 |
| Christian Mühlroth Registriert seit: 04.09.2005 Ort: Nürnberg
Beiträge: 561
|
Wenn ich mit einem Controller arbeite, dann is das genauso okay, fänd ich auch irgendwo hübsch. Aber dann nochmal die Frage: Hab ich bei einem Controller etwa alle Methoden, die ich jemals brauche (außer Model und View-Aufgaben) in der Contoller-Klasse? Das wär doch dann ganz schön oversized, meiner Meinung nach .. So ergeben sich dann 2 Möglichkeiten: 1) index.php filtert die action raus und initialisiert den Controller 2) Der Controller (login, registration ect) hält die nötigen Methoden bereit, befrägt das Model nach den benötigten Daten und gibt alles dem View weiter 3) Der View gibt dann mein Zeug (in meinem Fall eben Templates) Und 1) index.php initailisiert automatisch den einzigen Kontroller im ganzen Script 2) Der Controller filtert sich die action raus und führt jenach action seine Methoden aus und übergibt die Daten dann dem View 3) Der View gibt dann mein Zeug (in meinem Fall eben Templates) Richtig?
__________________ http://www.ChrisDiary.De |
| | |
| | Nach oben #13 |
| Martin Breuer Registriert seit: 17.08.2005 Ort: Berlin
Beiträge: 1.642
|
Also ich realisiere das mit einem Hauptcontroller und mehreren Subcontrollern, z.b ist ein Subcontroller halt der zur Anzeige von Loginformular oder Userinfos je nach Loginstatus. Aber ansonsten hast du recht Chr!s
__________________ I did it my way - Senseless-Blog |
| | |
| | Nach oben #14 | |
| Christian Mühlroth Registriert seit: 04.09.2005 Ort: Nürnberg
Beiträge: 561
| Zitat:
Danke für eure Mühe
__________________ http://www.ChrisDiary.De | |
| | |
| | Nach oben #15 |
| Erfahrener Benutzer Registriert seit: 30.10.2005
Beiträge: 279
|
Also ich steig grad nicht durch. Chr!s was meinst du denn mit oversized? Warum wird denn der Controller immer größer? Und was bringt ein Subcontroller? Ist das irgendein weiteres Objekt das Funktionen bereitstellt?
|
| | |
| | Nach oben #16 |
| Gast
Beiträge: n/a
|
Das versteh ich auch net. Du hast einfach eine index.php, die den Controller instanziert. Dann werden im Controller ein paar Operationen und Anweisungen abgearbeitet. Ist er fertig werden die benötigten Daten an den View weitergegeben (zB Templates). Fertig. Meine Erfahrung ist, je strikter man das MVC Model einhält umso komplizierter wird es. Für dein Projekt reicht es wahrscheinlich die GUI vom Bussines Layer zu trennen (also View vom Controller). Du könntest natürlich noch einige Schichten zur Datenbankabstraktion etc. haben. Das ist aber IMO nur bei sehr umfrangreichen Sachen empfehlenswert, weil ansonsten alles sinnlos verkompliziert wird. Jay |
|
| | Nach oben #17 |
| Christian Mühlroth Registriert seit: 04.09.2005 Ort: Nürnberg
Beiträge: 561
|
Also mein Projekt ist nichts kleines, im Gegenteil. Ich hab schon Monate für die Grundkonzeption und Ideenausarbeitung gebraucht. Is also schon richtig groß angesetzt, und das wird es auch. Demnach brauch ich auch wirklich eine gtue MVCEintelung, sonst wird das später zu unübersichtlich. Nun, mit oversized mein ich einfach, dass ich für das besagte Projekt viele, wirklich viele verschiedene Funktionen brauche. Wo soll ich die denn dann unterbringen? Im Controller? Dann wäre dieser mehrere hundert Kilobyte groß, für mich is das eindeutig "oversized". Die Varinte mit den Subcontrollern passt perfekt, da kann ich immer genau das reinpacken, was benötigt ist.
__________________ http://www.ChrisDiary.De |
| | |
| | Nach oben #19 |
| Christian Mühlroth Registriert seit: 04.09.2005 Ort: Nürnberg
Beiträge: 561
|
Weiß schon Ich möcht das ganz bewusst alleine durchziehn. Ich wachse daran, und wenn ich Probleme hab - weiß ich mich ja wohin ich mich wenden kann
__________________ http://www.ChrisDiary.De |
| | |
| | Nach oben #20 |
| Erfahrener Benutzer Registriert seit: 30.10.2005
Beiträge: 279
|
Angenommen ich brauch zahlreiche verschiedene Funktion zum prüfen von Strings, Zahlen, etc. Dann geb ich dem Controller neben den template, db, model objekten eben noch ein paar andere objekte mit, welche naheliegende Hilfsfunktionen voneinander trennen um das gehts doch hier? Nennt man sowas dann Sub-Controller? Also ein Objekt das sich um Strings kümmert das andere um Zahlen, vielleicht auch eins mitSession Daten? |
| | |
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Verständnisfrage - MVC (Model-View-Controller) | Artemis | Anwendungsdesign / Softwarearchitektur | 24 | 11.01.2007 10:34 |
| PHP und das Observer-Pattern (MVC) | Ben | Anwendungsdesign / Softwarearchitektur | 14 | 26.05.2006 14:47 |
| MVC - Was darf die View | NewYork | Anwendungsdesign / Softwarearchitektur | 2 | 03.11.2005 21:42 |
| MVC, Strukturierung, Reaktion auf Events... | Ben | Allgemeine Java-Programmierung | 7 | 17.06.2005 16:34 |
| MVC Programmierung nur mit Klassen mit UI Endung? | Java17 | Desktop-Applikationen und Grafik | 5 | 14.03.2005 17:12 |