Entwurfsmuster für die Datenüberprüfung


23

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

Ich habe ein Objekt A. Objekt A kann abhängig von der 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 andere Reihe von Regeln zum Löschen. Einige dieser Regeln gelten für beide Operationen.

Bis jetzt denke ich, dass das Entwurfsmuster der Verantwortungskette am besten passt, aber ich habe Probleme, es umzusetzen.


6
Warum passt Ihrer Meinung nach das Entwurfsmuster für die Verantwortungskette am besten?
Adam Zuckerman

Antworten:


17

Normalerweise benutze ich eine separate Validator-Klasse, um jeden Anwendungsfall zu validieren. ZB bevor ich ein Produkt zur Datenbank hinzufüge, verwende ich AddProductValidator, um die Geschäftsregel zu validieren, bevor ich ein Produkt lösche, verwende ich DeleteProductValidator, um die Geschäftsregel zu validieren

Um die Validator-Klasse zu strukturieren, verfolge ich 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 Fluent Validation ( https://github.com/JeremySkinner/FluentValidation ) in Betracht ziehen . Ich finde es ziemlich cool und ziemlich nah an dem Artikel, den ich oben erwähnt habe


1
Neue URL von Fluent Validation: github.com/JeremySkinner/FluentValidation
Brij

4

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

Dekorateur Muster

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


Decorator würde funktionieren, aber ich stelle mir Decorator-Muster normalerweise als etwas vor, das verwendet werden soll, wenn Sie die Ausgabe in eine Eingabe für eine andere Klasse umwandeln möchten. In diesem Fall würden Sie einfach validieren. Ich denke, die Kette der Verantwortung kann imho besser funktionieren.
Neil
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.