Welche Validierungsregel wo und wie?



  • Hi,

    gehen wir mal davon aus, dass es eine Bearbeitungsmaske gibt, in der sich eine Selectbox befindet.

    Diese Bearbeitungsmaske gibt es zweimal: auf Seite A und auf Seite B. Auf Seite A werden nicht alle Selectbox-Elemente angezeigt, die auf Seite B angezeigt werden.

    Nun gibt es ja die MVC-Lösung mit ViewModels. Man hätte also je Seite ein ViewModel, das die Liste an gültigen entsprechend per Service aus der Datenbank ausliest und die View holt sich die Daten dann aus dem ViewModel raus.

    Beim Speichern prüft dann das ViewModel, ob das gewählte Element in der Liste an gültigen Elementen vorhanden ist, und übergibt die Werte ans Domain-Model. Dieses wiederum prüft, ob der Wert überhaupt für das Model zugelassen ist (z. B. um sicherzustellen, dass keine Foreign-Key-Verletzung auftreten kann) und speichert den Wert letztendlich in die Datenbank.

    Dabei entsteht aber ein Problem: Sowohl das ViewModel als auch das Domain-Model übernehmen die selbe Validierung, weil das ViewModel ja bereits die Daten per Service aus der Datenbank ausgelesen hat und somit nur gültige Elemente zulässt. Das Model prüft das aber auch noch mal, weil es von einem ViewModel ja nichts weiß. Außerdem könnte man als ungeschickter Programmierer versehentlich falsche Daten per Service holen und dann würde eine FK-Verletzung auftreten.

    Kurz gesagt: Mich stört, dass die Validierung unnötigerweise doppelt stattfindet.

    Wie löst man das Problemchen? Ich weiß nicht weiter!



  • Du hast 2 unterschiedliche Models bzw. DatenSourcen.

    Nur weil die Daten quasi gleich sind, heißt es nicht dass sie gleich behandelt werden. Es sind 2 unterschiedliche Quellen - also unterschiedliche Models oder DataSourcen oder Entities oder wie auch immer man es in deinem Framework nennt.



  • Ich kann dir nicht ganz folgen - welche Klassen mit welchen Daten und Regeln zur Validierung hättest du denn dann?



  • Ich sage lediglich dass deine 2 views komplett unterschiedliche views sind, auch wenn du die Daten für sehr ähnlich hältst, so sind es unterschiedliche Daten und daher unterschiedliche views.

    Je nachdem wie du hier view mit model verbindest, sind es entweder unterschiedliche views, models, entities, controller, etc.


Anmelden zum Antworten