Това трябва да е лесно за следване, но след известно четене все още мога да намеря отговор.
Така че, кажете, че потребителят трябва да промени своя мобилен номер, за да постигнем това, може да имаме команда като: ChangedUserMobileNumber
държи новия номер. Домейнът, отговорен за обработката на командата, ще извърши промяната в агрегата и ще публикува събитие: UserMobilePhoneChanged
Има абонат за това събитие в друг домейн, който също държи мобилния номер на потребителя в своята съвкупност, но според нашия софтуерен архитект събитията не могат да стареят никакви данни, така че това, което получаваме, е меко казано доста глупаво:
Домейн 1 получава командата за актуализиране на мобилния номер, номерът се актуализира и се публикува едно събитие, също така, тъй като събитието не може да съдържа данни, манипулаторът на команди в домейн 1 издава още една команда, която се изпраща до домейн 2. Абонатът на това събитие също живее в Домейн 2, след което имаме Сага, която да обработва както събитието, така и командата.
По отношение на внедряването ние използваме NServiceBus, така че имаме тази сага за обработка на тези съобщения и в нея имаме този ред код, където полето entity.IsMobilePhoneUpdated, съхранено в сага, се променя, когато събитието се обработва.
bool isReady = (entity.IsMobilePhoneUpdated && entity.MobilePhoneNumber != null);
Ефективно сагата се стартира както от командата, така и от събитието, повдигнато в Домейн 1, и докато това условие не бъде изпълнено, сагата се поддържа жива.
Ако зависеше от мен, щях да изпратя мобилния номер на самото събитие, просто искам да получа още няколко мнения по този въпрос.
Благодаря