Wzorzec projektowy do sprawdzania poprawności danych


23

Jaki byłby najlepszy wzór dla tego problemu:

Mam obiekt A. Obiekt A można zarejestrować lub usunąć z bazy danych w zależności od żądania użytkownika.

Sprawdzanie poprawności danych odbywa się przed rejestracją lub usunięciem obiektu. Istnieje zestaw reguł do sprawdzenia przed zarejestrowaniem obiektu oraz inny zestaw reguł do usunięcia. Niektóre z tych zasad są wspólne dla obu operacji.

Jak dotąd uważam, że wzór projektowania Łańcucha odpowiedzialności najbardziej pasuje, ale mam problem z jego wdrożeniem.


6
Jak myślisz, dlaczego wzór projektowania Łańcucha odpowiedzialności jest najlepszy?
Adam Zuckerman

Odpowiedzi:


17

Zwykle użyję osobnej klasy walidatora, aby sprawdzić poprawność każdego przypadku użycia. Np. Przed dodaniem produktu do bazy danych użyję AddProductValidator do zweryfikowania reguły biznesowej, przed usunięciem produktu użyję DeleteProductValidator do sprawdzenia poprawności itp. Wspólną regułę biznesową można wyodrębnić do klasy specyfikacji (wzorzec specyfikacji) i udostępnić klasom walidatora

Aby ustrukturyzować klasę walidatora, postępuję zgodnie z podejściem tutaj: http://lostechies.com/jimmybogard/2007/10/24/entity-validation-with-visitors-and-extension-methods/

Jeśli używasz platformy .NET, myślę, że możesz rozważyć płynną walidację ( https://github.com/JeremySkinner/FluentValidation ). Myślę, że to całkiem fajne i bardzo zbliżone do artykułu, o którym wspomniałem powyżej


1
nowy adres Fluent Validation: github.com/JeremySkinner/FluentValidation
Brij

4

Jak opisano, prawdopodobnie zaimplementowałbym typ opcji . W ten sposób mogłem zwrócić „Brak” lub zweryfikowaną wartość (być może leniwie), ale jest to szczegół implementacji i ładnie prowadzi do pomysłu użycia Dekoratora .

Wzór dekoratora

Oczywiście, jeśli interfejs stanie się brzydki, skorzystałbym z fasady .


Dekorator działałby, ale zwykle myślę o wzorze Dekoratora jako o czymś, co można wykorzystać, gdy chcesz przekształcić dane wyjściowe w dane wejściowe dla innej klasy. W takim przypadku po prostu sprawdzasz poprawność. Myślę, że łańcuch odpowiedzialności może działać lepiej imho.
Neil
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.