Czytałem myśli Grega Younga i Udiego Dahana o Rozkazach Rozdziału Odpowiedzialności i wiele z tego, co przeczytałem, uderza we mnie. Moja domena (śledzimy pojazdy, które realizują dostawy) ma koncepcję trasy, która zawiera jeden lub więcej przystanków. Potrzebuję moich klientów, aby mogli ustawić je w naszym systemie, dzwoniąc do serwisu internetowego, a następnie uzyskać informacje o trasie i sposobie, w jaki pojazd się rozwija.CQRS - Czy polecenie powinno próbować utworzyć "złożoną" jednostkę szczegółów?
W przeszłości miałbym "przycięte" klasy DTO, które bardzo przypominają moje klasy domenowe, a klient utworzyłby RouteDto z tablicą StopDto (s) i zadzwoniłby do naszego webcastu CreateRoute, przekazując w RouteDto . Kiedy wysyłają zapytanie do naszego systemu, wywołując metodę GetRouteDetails, zwracałem do nich dokładnie te same obiekty. Jednym z atrakcyjnych aspektów CQRS jest to, że RouteDto może mieć wszystkie właściwości, które klient chce zapytać, ale nie mają żadnego ustawienia biznesowego podczas tworzenia trasy. Dlatego tworzę oddzielną klasę CreateRouteRequest, która jest przekazywana podczas wywoływania "polecenia" CreateRoute oraz klasy Route DTO, która jest zwracana jako wynik zapytania.
class Route{
string Reference;
List<Stop> Stops;
}
Ale potrzebuję, aby mój klient podał mi szczegóły trasy i zatrzymania, gdy utworzą trasę. Jak widzę, mógłbym albo ...
Podaj moją klasę CreateRouteRequest a właściwość zatrzymania, która jest tablicą "czegoś" reprezentującą dane, które muszą podać o każdym przystanku - ale co nazywam tą klasą ? To nie jest Stop, ponieważ to właśnie nazywam listę DTO w moim DROGOWYM DROGU, ale nie lubię "CreateStopRequest". Zastanawiam się również, czy utknąłem w nastawieniu CRUD, myśląc w kategoriach informacji o szczegółach i prosząc klienta, aby tak myślał.
class CreateRouteRequest{
string Reference;
...
List<CreateStopRequest> Stops;
}
lub
Nazywają CreateRoute, a następnie wprowadź liczbę połączeń na metodzie AddStopToRoute. Czuję się nieco bardziej "behawioralny", ale stracę możliwość traktowania trasy, w tym jej przystanków, jako pojedynczego polecenia atomowego. Jeśli utworzą trasę, a następnie spróbują dodać zatrzymanie, które zawiedzie z powodu jakiegoś problemu z weryfikacją, będą mieli częściowo poprawną trasę.
Fakt, że nie mogę wymyślić dobrego imienia dla listy obiektów "StopCreationData", nad którymi pracuję w opcji 1, sprawia, że zastanawiam się, czy czegoś brakuje.