MVC - Konzept

holzmensch

Erfahrenes Mitglied
Hallo Leute,

seit neustem probiere ich mich mit codeigniter aus und es klappt soweit alles richtig gut. Was ich aber noch nicht so ganz verstanden habe ist das MVC Konzept. Es wird immer davon gesprochen, dass man die Geschäftslogik in den Models abwickelt (also DB). In jedem Tutorial werden Benutzereingaben im Controller validiert. Das MVC Konzept soll aber die Wiederverwendbarkeit steigern, was für mich irgendwie im Gegensatz steht.

Kleines Beispiel, damit man meine Problematik versteht:

Benutzer gibt Username ein, der nur aus Buchstaben bestehen soll. Anschließend wird der Benutzer in der Datenbank angelegt, solange es freie Plätze gibt. Den Stand der Plätze holt man aus einer anderen DB-Tabelle.

Benutzer gibt Namen ein, dieser wird auf die Zusammensetzung validiert im Controller. In derselben Controllermethode wird auch ein Model erstellt, dass die freien Plätze wiedergibt. Stimmt alles, wird mit dem User-Model der Benutzer erstellt.

Will man das Model wiederverwenden, so muss man den Namen immer wieder validieren. (keine Wiederverwendbarkeit) Verlegt man die Validierung in das Model, so stimmt das Konzept nicht.

So, Roman zuende! :) Wo liegt denn mein Denkfehler?
Danke!
 

oneof6

Mitglied
Hi,

Du hast da keinen Denkfehler. Genau diese Frage ist im MVC einfach nicht definiert. Die exakten "Orte" für Benutzervalidierung und Geschäftslogik, muss man für den konkreten Anwendungsfall selbst entscheiden. Ich persönlich finde die in der Enterprise-Welt verwendete Nomenklatur besser. Hier spricht man von:

- Presentation Tier (V)
- Business Tier (C)
- Data Tier (M)

Für mich ist dies klarer, denn allein von den Namen kann ich hier ableiten was passiert. Ich "präsentiere" (GUI), ich "validiere und manipuliere" (Geschäftslogik) und ich "speichere" (Datenspeicher). Alles was ich dem Benutzer anzeigen will, Buttons sichtbar schalten, Farben ändern, Popups öffnen...mach' ich im "Presentation Tier". Alles was ich validieren will und manipulieren will, Formatprüfungen, Feldlängen, Relationen, echter Datenzugriff...mach ich im "Business Tier". Die Struktur der Daten, das Datenmodell die Beziehungen, bilde ich im "Data Tier" ab. Die GUI bleibt hierbei sehr flexibel und einfach austauschbar, während die Geschäftslogik mit der Zeit sehr mit der Datenbank verschmilzt, da die Logik ja auf z.B. Relationen achten muss, die in der Datenbank modelliert sind.

So...und hier ist meine Novelle zuende! :)

Gruß,
OneOf6
 

holzmensch

Erfahrenes Mitglied
Also auf gut deutsch gesagt validiert man wohl im Controller der Konvention nach. Aber man kann es eig machen wie es einem am besten passt. Nagut, dann bleibt mein Konflikt noch erhalten! ;)
 

webmeck

Grünschnabel
Genau!

Ich würde die Logik der Validierung aber in eine eigene Klasse packen und diese vom Controller aus aufrufen. Vielleicht muss der Nutzer beim nächsten mal anders Validiert werden, oder ein Passwort muss das Gleiche Kriterium erfüllen wie der Username.

Ob das dem strengen MVC-Modell widerspricht, weiß ich aber nicht.

Viel Erfolg wünscht dir
webmeck