OO-design-patterns zu verwenden für die Validierung
Ich bin in den Prozess des Schreibens einige Validierungs-code basiert auf folgenden Annahmen:
- Validation code muss in einer externen Klasse
- d.h. es werden keine Daten der Klasse enthält eigene Validierung
- Das gleiche Objekt validiert werden können in unterschiedlicher Weise
- z.B. validieren der syntax nur; bestätigen gegen DB-look-ups; Validierung gegen Duplikate; etc
- Validierung Ausgabe kann unterschiedlich sein, je nachdem, was es braucht
- z.B. die Ausgabe einer einzigen Fehlermeldung; Ausgabe einer Liste aller Fehler bei der Validierung; ähnlich, aber im JSON-format, einschließlich Fehlercodes, etc
Welche Kombination aus OO-design-patterns sind am besten, um dieses Problem zu lösen? Eine Fabrik könnte ein guter Weg, um eine bestimmte validator, aber bessere Ansätze?
Du musst angemeldet sein, um einen Kommentar abzugeben.
One size does not fit all! Machen Sie es einfach!
Bieten Prüfungen mit gemeinsamen Methoden/Schnittstelle zur Ausgabe von Daten, kategorisieren, Warnhinweise, filter - /Prozess-Warnungen ausgelöst, mehr als einmal. Erstellen Sie keine anspruchsvolle Art und Weise der überprüfung selbst, zumindest nicht vor dem schreiben ein paar realen Leben Prüfungen.
Bewegen, aus dem Weg und lassen Sie die Prüfer tun, was Sie tun sollen:
Ich denke, ich mache das gleiche jetzt.
Das Muster, das hier gilt, ist das Filter-Muster und die Filter der Kette.
Jeder filter überprüft, die gegen einen "Weg" (wie Sie Sie nennen).
Zuerst die syntax an, die zweite Db-lookups etc. (von Ihrer zweiten Kugel).
Ich hatte das gleiche problem und ich fand das Besucher-Muster, um wirklich effektiv bei der Entkopplung die Validierungslogik aus dem Daten-Objekt. Sie müssen zum instrument Ihrer Daten Klassenhierarchie mit accept( visitor) - Methoden, aber wenn Sie alles, das ist einfach genug. Auch wenn Sie mit einem Drittanbieter-Hierarchie ein, ohne Besucher zu unterstützen, können Sie erstellen von Wrappern, die akzeptieren traversal tree und das ist ziemlich nah an, dass die Methode innerhalb der Klasse.
Zur Durchführung der verschiedenen Validierung implementieren Sie einen anderen validator-Klasse auf und übergeben es auf der accept-Methode auf das root-Objekt. Ich war auch in der Lage, andere Dienstprogramm Besucher rund um das Modell, das mir erlaubt, einen generator erzeugen Besucher, dass alle Felder ausgefüllt mit Proben - /random-Daten. Ich ging ein wenig Besucher verrückt drauf, weil ich so aufgeregt war. Man kann wahrscheinlich sagen, ich bin immer noch begeistert, vor allem mit der Veränderung zu sagen, jemand anderes darüber.
Wenn Sie tun, jede Art von grafischen arbeiten, sollten Sie einen Blick auf JGoodies Validation: http://www.jgoodies.com/downloads/libraries.html (auch hier einige Artikel: http://www.jgoodies.com/articles/).
Ich würde eine Prüfung für jede Klasse, die Bedürfnisse der Validierung. Sie können tatsächlich erzeugen mehr als einen Prüfer, wenn Sie benötigen verschiedene Arten der Validierung, z.B. strenge oder nicht. Sie können die Gruppe gemeinsame Eigenschaften und Methoden in Klassen wie AbstractValidator und ValidationResult (die eine Liste der Fehler, die Schwierigkeit, etc.).
Vorsichtig sein, over-design. Versuchen Sie, beginnen Sie mit etwas einfaches wie:
oder zu validieren Blick:
Abhängig von Ihrer Architektur aber. Zum Beispiel, wenn Sie automatisch übertragen input aus der Sicht der Domäne, dann brauchen Sie nicht so viel zu tun, Validierung in der view-Ebene.