Validierung von Daten und Formularen in der MVC-Architektur

8

Ich entwickle die meisten meiner Webanwendungen mit CodeIgniter und habe immer den Ansatz der Validierung von Formulardaten innerhalb des Controllers mit der integrierten Form Validation-Klasse gewählt, bevor ich diese Daten an das zu verwendende Modell sende, z. B. die Daten einfüge in die Datenbank.

Allerdings höre ich immer wieder die Zeile "dünne Regler, dicke Modelle" - und ich frage mich, ob diese Validierungsprüfungen in das Modell eingefügt werden sollten.

Drei Dinge fallen mir auf, wenn ich an diesen Ansatz denke.

  1. Wie können dem Benutzer verschiedene Fehlermeldungen angezeigt werden, ohne scheinbar hässliche Arrays oder Objekte aus diesen Modellfunktionen zurückzugeben? Zum Beispiel eine doppelte E-Mail bei der Anmeldung für ein Konto. Hätte die Methode, die für das Hinzufügen eines Benutzers im Modell verantwortlich ist, ein Array oder Objekt zurückgeben müssen, um anzuzeigen, ob die Einfügung erfolgreich war, und eventuelle Fehlermeldungen?

  2. Wenn ich die Validierungsüberprüfungen im Modell durchführe und die Variablen überprüfe, die den Methoden vom Controller übergeben werden (nicht POST-Daten), werde ich die Form Validation-Klasse verlieren, eine Klasse, die ich sehr nützlich finde Projekte. Würden Sie vorschlagen, dass ich eine Klasse oder eine Bibliothek schreibe, die wie eine CI-Bibliothek verwendet werden kann, um die Form Validation-Klasse nachzuahmen, aber für die angegebenen Variablen und nicht nur für die POST-Daten?

  3. Ausgehend von diesem Problem ..., da die POST-Daten vor der Weitergabe an das Modell auf Existenz validiert werden müssten ( isset($_POST['myvar']) ), sollte der Rest der Validierung nicht nur in den Controller eingegeben werden auch?

Irgendwelche Vorschläge, Ratschläge, Meinungen werden geschätzt!

    
Sam 03.04.2012, 02:27
quelle

1 Antwort

4

Ihr ursprüngliches Problem kommt von der Tatsache, dass die Interpretation von MVC durch CodeIgniter ziemlich erschreckend ist. Dieser Rahmen gibt vor, dass View nur eine Vorlage ist und Model nur ein ORM (, was manche sagen, sollte als anti klassifiziert werden) -Pattern ). Das ist völlig falsch und zwingt Bot Business und Präsentation Logik in den Controller.

Aber lassen Sie View beiseite.

Das Modell in MVC ist keine Klasse oder ein Objekt. Modell ist eine Ebene , die die gesamte Geschäftslogik enthält. Es besteht tatsächlich aus Instanzen aus einer Vielzahl von Klassen. Die beiden am häufigsten vorkommenden Gruppen sind Domänenobjekte [ 1 ] [2 ] (was Leute normalerweise "Modelle" nennen) und Objekt, das für die Speicherung und den Abruf von Informationen verantwortlich ist - normalerweise DataMapper . Die Modellschicht enthält auch eigenständige Komponenten (sowohl eigene als auch von Drittanbietern) und Abstraktionen auf höherer Ebene - Dienste.

Was Sie als Validation -Klasse haben, kann als eigenständige Komponente betrachtet werden, die entweder von Domänenobjekt zur Durchführung der Validierung verwendet werden kann oder ein Domänenobjekt zur Validierung übergeben werden .. hängt von Ihrer Implementierung ab.

In Ihrer Situation würde ich das auf der Serviceebene handhaben. Dies würde der Instanz von View class entweder ein gültiges Domänenobjekt oder ein Objekt liefern, das den Fehler darstellt.

Einige Lesestoffe, an denen Sie interessiert sein könnten:

Dann wieder ... was zur Hölle weiß ich von all dem ..

    
tereško 03.04.2012 06:58
quelle