Antwort
 
Themen-Optionen
Alt 06.06.2006, 01:54 Nach oben    #1
Christian Mühlroth
 
Benutzerbild von Chr!s
 
Registriert seit: 04.09.2005
Ort: Nürnberg
Beiträge: 561
Standard Verständnisfrage zum MVC-Model

Nun ich weiß es is recht spät (fast 2), aber irgendwie kann ich um die Zeit erst richtig anfangen zu denken. (oder auch nicht, aber ich komm mir jedenfalls so vor ).
Nun, ich hab mir heute mal das zu Gute geführt:
http://www.tonymarston.net/php-mysql...ontroller.html (wie in Bens Thread von ihm verlinkt).

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:
<?php
class Controller {
        function 
Controller() {
                if(isset(
$_POST['submitted'])) {
                        
$aPostData = array(...);
                        
$bIsAuthorized $oModel -> validateAuth($aPostData);
                        
                        if(
$bIsAuthorized == true) {
                                
$oView -> render('logged_in');
                        }
                }
        }
?>
Das ist jetzt natürlich mehr als grob und unzureichend. Doch auch hier hab ich meine Verständnisprobleme.

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
Chr!s ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.06.2006, 02:05 Nach oben    #2
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 964
Standard

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.
Lars ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.06.2006, 02:29 Nach oben    #3
Christian Mühlroth
 
Benutzerbild von Chr!s
 
Registriert seit: 04.09.2005
Ort: Nürnberg
Beiträge: 561
Standard

Zitat:
Zitat von Lars
Der Controller, in deinem Fall der Login,
Heißt das dann, das ich mehrere (quasi: viele) Controller habe? Oder wie soll ich das verstehn?

Zitat:
Zitat von Lars
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.
So verwende ich das ja uach bisher, ich glaube, ich denke immer noch viel zu strikt bzw gradlinig. Das Prinzip hab ich schon verstanden, nur es hapert wie gesagt am der Umsetzung.

So wie ich das grad versteh - wo sind dann meine ganzen Funktionen wie validateLogin() ect .. im Controller?
__________________
http://www.ChrisDiary.De
Chr!s ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.06.2006, 02:37 Nach oben    #4
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 964
Standard

Zitat:
Heißt das dann, das ich mehrere (quasi: viele) Controller habe?
Jap. Ein Login ist ein Controller, eine Registrierung auch, ein Kontaktformular, whatever.

Zitat:
wo sind dann meine ganzen Funktionen wie validateLogin() ect .. im Controller?
Sozusagen. Das Model bietet nur den Zugriff auf persistente Daten, die View macht nur die Ausgabe. Demnach ist alles dazwischen auf irgendeine Weise Controller.
Da ist natürlich viel Platz für Diskussionen, aber prinzipiell ist es so.
__________________
Gedanken aus Draht stricken einen Zaun.
Lars ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.06.2006, 02:41 Nach oben    #5
Christian Mühlroth
 
Benutzerbild von Chr!s
 
Registriert seit: 04.09.2005
Ort: Nürnberg
Beiträge: 561
Standard

Zitat:
Jap. Ein Login ist ein Controller, eine Registrierung auch, ein Kontaktformular, whatever.
Guuuuut. Dann ist das doch schon so, wie ich es mir gedacht habe. Sonst hätte ich mich auch stark gewundert, um ehrlich zu sein.

Zitat:
Sozusagen. Das Model bietet nur den Zugriff auf persistente Daten, die View macht nur die Ausgabe. Demnach ist alles dazwischen auf irgendeine Weise Controller.
Da ist natürlich viel Platz für Diskussionen, aber prinzipiell ist es so.
Klar, denn mein Controller bietet ja dann quasi mein Funktionen-Repository für die aktuelle Aufgabe (index.controller.php, login.controller.php) usw ..

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
Chr!s ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.06.2006, 02:52 Nach oben    #6
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.471
Standard

Imho gibt es nur einen einzigen Controller, der dann an die Aufgaben an seine Methoden delegiert!
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.06.2006, 02:53 Nach oben    #7
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 964
Standard

Ist ja das selbe Prinzip. Ob man das jetzt weiter aufteilt oder gekapselt lässt, macht ja nicht den Riesenunterschied.
__________________
Gedanken aus Draht stricken einen Zaun.
Lars ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.06.2006, 02:55 Nach oben    #8
Christian Mühlroth
 
Benutzerbild von Chr!s
 
Registriert seit: 04.09.2005
Ort: Nürnberg
Beiträge: 561
Standard

Zitat:
Zitat von Ben
Imho gibt es nur einen einzigen Controller, der dann an die Aufgaben an seine Methoden delegiert!
Gerade diese Variante verwirrt mich aber. Demzufolge hat dieser Controller ja dann eine unmenge an Methoden? Ich handhab das lieber so, dass ich mehrere Controller haben - falsch wird es ja nicht sein..
__________________
http://www.ChrisDiary.De
Chr!s ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.06.2006, 04:39 Nach oben    #9
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.471
Standard

Falsch nicht.
Wie ich hier schrieb
Zitat:
Zitat von Ben
ch verwende den Begriff Controller dennoch, da ich finde, dass man so trotz des Unterschiedes der Implementierung z.B. in Java etwas mehr Übersicht erhält, sofern man im Voraus klärt, was der Begriff bedeutet.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.06.2006, 04:45 Nach oben    #10
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 964
Standard

Zitat:
Ben 06.06.2006 02:52:37 bin pennen.
Ben 06.06.2006 04:35:05 alter ... jetzt kannsch net pennen .. geht doch nicht an ...
Lars 06.06.2006 04:42:49 :>
__________________
Gedanken aus Draht stricken einen Zaun.
Lars ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.06.2006, 11:37 Nach oben    #11
Erfahrener Benutzer
 
Registriert seit: 30.10.2005
Beiträge: 279
Standard

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();
    }
}
ex³ ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.06.2006, 14:18 Nach oben    #12
Christian Mühlroth
 
Benutzerbild von Chr!s
 
Registriert seit: 04.09.2005
Ort: Nürnberg
Beiträge: 561
Standard

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
Chr!s ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.06.2006, 14:22 Nach oben    #13
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard

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
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.06.2006, 14:46 Nach oben    #14
Christian Mühlroth
 
Benutzerbild von Chr!s
 
Registriert seit: 04.09.2005
Ort: Nürnberg
Beiträge: 561
Standard

Zitat:
Zitat von WarrenFaith
Also ich realisiere das mit einem Hauptcontroller und mehreren Subcontrollern
Ich muss sagen, diese Methode hört sich für mich am besten an. Danke dafür, ich werds wohl auch so nutzen.

Danke für eure Mühe
__________________
http://www.ChrisDiary.De
Chr!s ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.06.2006, 15:06 Nach oben    #15
Erfahrener Benutzer
 
Registriert seit: 30.10.2005
Beiträge: 279
Standard

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?
ex³ ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.06.2006, 15:44 Nach oben    #16
Jay
Gast
 
Beiträge: n/a
Standard

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
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.06.2006, 15:51 Nach oben    #17
Christian Mühlroth
 
Benutzerbild von Chr!s
 
Registriert seit: 04.09.2005
Ort: Nürnberg
Beiträge: 561
Standard

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
Chr!s ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.06.2006, 15:53 Nach oben    #18
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.471
Standard

Ganz alleine mit so einem großen Projekt ... uiuiui ..
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.06.2006, 15:58 Nach oben    #19
Christian Mühlroth
 
Benutzerbild von Chr!s
 
Registriert seit: 04.09.2005
Ort: Nürnberg
Beiträge: 561
Standard

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
Chr!s ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.06.2006, 16:06 Nach oben    #20
Erfahrener Benutzer
 
Registriert seit: 30.10.2005
Beiträge: 279
Standard

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?
ex³ ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ä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


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:47 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44