MVC - wo Benutzereingaben überprüfen?
-
Sowas würde ich in das Model legen. Das Model weiß schliesslich 1. was es für Daten hat und 2. kann dieses bestimmen, was für Daten zugelassen werden. Der Controller ist nur der Vermittler zwischen der View und dem Model. Der sollte eigentlich nichts manipulieren. Aber eine Eingabeprüfung ist auch eine Datenmanipulation. Und die Hoheit über Daten hat immer noch das Model.
-
grandpa schrieb:
Aus dem Eingabefeld bekommt man erst mal einen String. Sollte der so wie er ist an den Controller übergeben werden oder soll die View den String vorher schon in einen Integerwert parsen und im Fehlerfall eine Fehlerausschrift produzieren und nichts an den Controller melden

du könntest es auch zweistufig machen. beim eingeben wird z.b. eine vorfilterung gemacht, ob etwa keine buchstaben drin sind, wenn der benutzer zahlen eingeben soll. der controller verwirft dann den input, der nicht zum model passt.
-
naja die eingeabeelemete des controller können ja extra (filter) funktionen haben umd eigneben zu prüfen... so habe ich es immer gemacht.. aber ob dies elegeant ist weis ich nicht...
Bspw. bei einem Editfeld für eine Zahlen eigenabe , max. und min. überprüfen ..
Das Model sollte dann schon mit den vorgefiltern daten arbeiten können.. aber aber auch
-
Artchi schrieb:
Sowas würde ich in das Model legen. Das Model weiß schliesslich 1. was es für Daten hat und 2. kann dieses bestimmen, was für Daten zugelassen werden. Der Controller ist nur der Vermittler zwischen der View und dem Model. Der sollte eigentlich nichts manipulieren. Aber eine Eingabeprüfung ist auch eine Datenmanipulation. Und die Hoheit über Daten hat immer noch das Model.
das wäre völlig falsch. das model darf niemals direkt von aussen verändert werden. für dessen manipulation ist der controller zuständig.

-
Ja, die View könnte natürlich auch schon filtern. Es kann ja eine reine Integerview sein, die eh nur Zahlenwerte annimmt.
Am Ende ist es eine persönliche Designentscheidung. Würde eher wichtiger finden, das man den Filter austauschbar macht. Z.B. mit einem Visitor-/Strategiepattern. Ob es dann am Model, Controller oder View übergeben wird...
-
das daten format etc. eines eingabefeldes soll bei der übergabe ans model schon korrekt sein...
-
Artchi schrieb:
Ja, die View könnte natürlich auch schon filtern. Es kann ja eine reine Integerview sein, die eh nur Zahlenwerte annimmt.
eine 'view', wie der name schon sagt, nimmt nichts an, sondern macht nur die darstellung. weisst du überhaupt, um was es hier geht

--> http://de.wikipedia.org/wiki/Model_View_Controller
-
controller (eingabe der Daten und formatprüfung)
Model (verarbung der daten)
view (anzeige der daten bspw. diagramm)
grob ausgedrückt...
-
BorisDieKlinge schrieb:
controller (eingabe der Daten und formatprüfung)
Model (verarbung der daten)
view (anzeige der daten bspw. diagramm)
grob ausgedrückt...
ich meinte nicht dich

-
Also wenn das Model erst die Daten prüft, dann wäre es ja von der View abhängig. Wenn die View ein Eingabefeld zur Zahleneingabe hat, dann müsste das Model einen Text engegennehmen, wenn es ein Schieberegler wäre, der eine Zahl zurück gibt, dann müsste das Model eine Zahl entgegen nehmen. Ich würde die Überprüfung im Controller machen. Man kann zwar eine Vorfilterung in der View machen, aber die darf nicht die Überprüfung im Controller ersetzen, weil man die View einfach austauschen kann.
-
hm, das sind ja eine ganze Menge an verschiedenen Meinungen.
Meiner Meinung nach hat das Model Methoden wie in dem Beispiel
berechneFakultaet(unsigned int n)
und nicht
berechneFakultaet(string n)d.h. der richtige Datentyp wird im Model schon erwartet.
Deswegen muss die Umwandlung bzw Formatüberprüfung schon vorher passieren.
Was anderes ist es, wenn vielleicht bestimmte Wertebereiche vom Model erwartet werden, durch set()-Methoden sichergestellt.
Die View sollte das mitnichten wissen, sonst wäre sie abhängig.Beispiel Model-Methode:
void setWahrscheinlichkeit(double wahrscheinlichkeit) { if (wahrscheinlichkeit <= 1 && wahrscheinlichkeit >= 0) { this->wahrscheinlichkeit = wahrscheinlichkeit; } }In dem Fall prüft das Model die Daten. Ich denke das sollte auch so sein.
Allerdings wäre das irgendwie komisch. Davor prüft View oder Controller auf double-Wert und im Fehlerfall würde eine Fehlerausschrift wie "Gleitkommazahl erwartet!". Dann gibt der Nutzer 5 ein und dann würde die Fehlermeldung kommen wie "Wert zwischen 0 und 1 erwatet" Das ist ja auch irgendwie komisch.