Czytam o projektowaniu opartym na domenach od prawie dwóch lat i ostrożnie wprowadzam pewne koncepcje do mojej codziennej pracy lub przynajmniej planuję, jak rzeczy, które robię regularnie, mogą być wykonane w ramach projektu opartego na domenach.
Jeden wniosek, do którego zacząłem dochodzić, szczególnie w odpowiedzi na więcej informacji o pozyskiwaniu zdarzeń i segregacji odpowiedzialności za zapytania (CQRS), że być może obiekty domeny są przeznaczone wyłącznie do zapisu. Mówiąc dokładniej, wydaje się, że to, co ludzie subtelnie sugerują w dużej części dokumentacji, przeczytałem, że obiekty domeny są odpowiedzialne za wykonywanie operacji / obliczeń ukierunkowanych na domenę, sprawdzanie poprawności, a następnie są tam głównie po to, aby zapewnić drogę do trwałości poprzez infrastruktura zapewniona w ramach implementacji repozytorium. Chociaż podoba mi się fakt, że może to znacznie uprościć model domeny, ponieważ eliminuje odpowiedzialność za ujawnianie stanu.
Jeśli rzeczywiście jest prawdą, że obiekty domeny mają być głównie używane jako obiekty tylko do zapisu, to rodzi się dla mnie kilka pytań, na które mam nadzieję, że ktoś mógłby odpowiedzieć.
- W jaki sposób wykonuje się testy jednostkowe na obiekcie, który ma obiekty ustawiające lub metody, które modyfikują stan obiektu, ale nie zapewniają zewnętrznego publicznego interfejsu do odczytu stanu z takich obiektów, jak obiekty pobierające właściwości w języku C #? Czy można udostępniać stan wyłącznie w celu umożliwienia testowania tego obiektu?
- W jaki sposób pokazuje się użytkownikowi wyniki obliczeń lub operacji wykonanych w domenie bez konieczności ich utrwalania, a następnie wyciąga wyniki ze sklepu trwałego poza kontekstem domeny? Czy można wystawiać stan wyłącznie w celu pokazania wyników?
Czy jest ogólna zasada, że jedynymi obiektami pobierającymi właściwości (uzyskującymi akcesoria) powinny być takie, które można również zapisywać w domenie? Lub inaczej mówiąc, czy własności tylko do odczytu powinny być jedyną rzeczą, której należy unikać, ponieważ są one tylko do celów odczytu, a zatem nie odgrywają niezbędnej roli w rzeczywistym modelu domeny?
Powiązany materiał:
Nie. CQRS może być używany obok DDD.
źródło
Testy jednostkowe modelu domeny powinny sprawdzać, czy dla każdego wykonanego polecenia zgłaszane są prawidłowe zdarzenia domeny. Polecenia domeny i przechwycone zdarzenia można przesłuchać pod kątem stanu.
Możesz również zastąpić
ToString()
polecenia i zdarzenia w domenie, aby zapewnić automatyczne, czytelne dla człowieka raportowanie stanu.Aby odpowiedzieć na drugie pytanie, aby wyświetlić wyniki poleceń, należy zaplanować, aby zdarzenia domeny były „publikowane” w modelu odczytu.
źródło