Staram się ostatnio zrozumieć DDD, ale mam parę pytań na które nie mogę znaleźć bez pośrednio odpowiedzi. Mamy powiedzmy taką logike:
- User robi request np. /create_new_x
- W tym endpoincie jest logika która za pomocą repozytorium wyszukuje odpowiedni root entity i odpala na nim odpowiednią metodę przekazując argumenty np. root_entity.create_new_x(name)
- .create_new_x jest już funkcją która jest częścią agregatu. Ponieważ chcemy zrobić to za pomocą event driven architecture, metoda tworzy nowy event np. CreatedNewX do którego dodaje odpowiednie dane związane z encją X (mogę do tego wykorzystać fabryke która przygotowuje mi obiekty typu X).
- Wysyłam event do jakiegoś EventQueue.
- Chce aby nowy element X trafił do jakiegoś storage. Wiem że tutaj wchodzą repozytoria. Czy repozytorium powinno jakby nasłuchiwać na EventQueue i jak zobaczy event CreateNewX to go sobie wziąć i zapisać do bazy? Czy to bardziej powinno być cześć logiki w momencie kiedy wykonujemy .create_new_x?
- Co jeżeli agregat potrzeba tworzenia X potrzebuje czegoś z innego agregatu? Świadczy to o źle zaprojektowanym agregacie?
- Czy jeden agregat powinnien być zainteresowany słuchaniem eventów z innych agregatów? Czy to też świadczy o tym że domena jest źle zamodelowana?
- Kwestia techniczna troszke bardziej. Implementuje to w pythonie za pomocą flaska. Potrzebuje napoczątku pododawać subskrybentów do EventQueue. Zrobić to raz globalnie, czy podczas wykonywania kodu danego endpointa tworzyć taką jakby EventQueue na czas trwania wykonania zapytania?