it-swarm.com.de

Entwurfsmuster für die Datenvalidierung

Was wäre das beste Entwurfsmuster für dieses Problem:

Ich habe ein Objekt A. Objekt A kann je nach Benutzeranforderung entweder registriert oder aus der Datenbank gelöscht werden.

Die Datenvalidierung erfolgt vor der Registrierung oder Löschung des Objekts. Es gibt eine Reihe von Regeln, die überprüft werden müssen, bevor das Objekt registriert werden kann, und eine weitere Reihe von Regeln zum Löschen. Einige dieser Regeln gelten für beide Vorgänge.

Bisher denke ich, dass das Entwurfsmuster Chain of Responsibility am besten passt, aber ich habe Probleme, es zu implementieren.

24
melodui

Normalerweise verwende ich eine separate Validator-Klasse, um jeden Anwendungsfall zu validieren. Z.B. Vor dem Hinzufügen eines Produkts zur Datenbank verwende ich AddProductValidator zum Validieren der Geschäftsregel, vor dem Löschen des Produkts verwende ich DeleteProductValidator zum Validieren usw. Allgemeine Geschäftsregeln können in die Spezifikationsklasse (Spezifikationsmuster) extrahiert und von Validatorklassen gemeinsam genutzt werden

Um die Validator-Klasse zu strukturieren, verfolge ich hier den folgenden Ansatz: http://lostechies.com/jimmybogard/2007/10/24/entity-validation-with-visitors-and-extension-methods/

Wenn Sie .NET verwenden, sollten Sie möglicherweise eine fließende Validierung in Betracht ziehen ( https://github.com/JeremySkinner/FluentValidation ). Ich finde es ziemlich cool und ziemlich nah an dem Artikel, den ich oben erwähnt habe

17
Phuong Nguyen

Wie beschrieben würde ich wahrscheinlich ein Optionstyp implementieren. Auf diese Weise könnte ich ein "None" oder einen validierten Wert zurückgeben (vielleicht träge), aber das ist ein Implementierungsdetail und führt gut zu der Idee, ein Decorator zu verwenden.

Decorator Pattern

Wenn die Schnittstelle hässlich wird, würde ich natürlich eine Fassade verwenden.

4
Elliott Frisch