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.
design-patterns
melodui
źródło
źródło
Odpowiedzi:
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
źródło
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 .
Oczywiście, jeśli interfejs stanie się brzydki, skorzystałbym z fasady .
źródło