Mam pytanie dotyczące sprawdzania wyjątkowości w DDD. Wiem już, że mam kilka pytań na ten temat na stackoverflow, ale one tak naprawdę nie odpowiadają na moją wątpliwość:unikalne sprawdzanie poprawności w DDD
Czy agregat może zachować referencję repozytorium, aby sprawdzić unikalność aktualizacji/wstawienia do bazy danych? Czy jest to zadanie wykonywane przez usługę aplikacji zamiast modelu domeny?
Powiedzmy, że chcesz sprawdzić, czy nazwa modelu użytkownik jest wyjątkowa gdy użytkownik Istnieje kilka metod, które można myślę:
- użytkownika referencyjnego modelu UserRepository wykonaj sprawdzania unikalności w Weryfikuj()
- Utwórz usługę domeny, aby sprawdzać wyjątkowość, używając UserRepository (wydaje mi się to nieco dziwne, ponieważ myślę, że normalna usługa domeny jest używana tylko w przypadku, gdy logika obejmuje więcej niż jeden model domeny).
- Utwórz obiekt specyfikacji w warstwie domeny, w odniesieniu do Use rRepository do hermetyzacji unikalną regułę sprawdzania i wykorzystanie usługi warstwy aplikacji to zrobić przed sprawdzanie aktualizacji/insert
A jeśli mogę użyć Dependency Injection, wciąż zastanawiam się, jak wstrzykiwać UserRepository do Użytkownika w podejściu 1, lub usługa domeny w podejściu 2 lub usługa aplikacji w podejściu 3, ponieważ w każdym przypadku, w przypadku obiektu/usługi/obiektu specyfikacji użytkownika/domeny, muszę ręcznie utworzyć obiekt, więc jedyna opcja, którą wydaje się używać lokalizatora usług w IoC dostać instancję. Ale lokalizator usługa jest anty-wzorzec więc chcę uniknąć to
Wszelkie przykładowy kod będzie bardzo doceniane
Powiedziałbym, że powinieneś zaimplementować to w warstwie usług. Aby być bardziej szczegółowym, zdefiniuj klasę sprawdzania poprawności dla określonego typu logiki biznesowej (polecenie) i obsłuż poprawność w dekoratorze, który otaczasz klasą usługi. – Steven
Czy byłoby to pomocne? http://stackoverflow.com/a/11958251/625332 – Dmitry
@Steven, więc powinienem utworzyć UserValidator do realizacji kontroli dla użytkownika w warstwie usługi? Czy jest uważane za przeciek reguły biznesowej (wyjątkowość nazwy użytkownika) poza warstwę domeny? –