Вы пытаетесь предотвратить недопустимое состояние системы, которое может произойти в любое время.Категория может быть удалена в любое время после того, как Пользователь ее придерживается.
В распределенном мире невозможен переход системы масштабируемой в недопустимое состояние.Вместо этого вы должны сосредоточиться на том, как система восстанавливается из недопустимых состояний.В этом конкретном случае вы должны подумать о том, что должно произойти, когда (не если!) Категория будет удалена, и есть пользователи, которые присоединились к ней.Может быть, вы уведомите их, что категория X больше не существует или просто тихо удаляет их членство?Ваши деловые люди должны сказать вам.
Вы можете проверить существование категории до того, как пользователь выполнит команду, но только в качестве оптимизации, чтобы ограничить недобросовестных пользователей, использующих ваши данные дляпример, а не то, что лежит в основе архитектуры системы.
Игнорируйте правило «говорите, не спрашивайте», и запрашивайте CategoriesActor, используя протокол Ask, чтобы определить, существует ли категория с указанным Id или нет?
Это правило не применяется здесь, но в ситуациях, когда вы запрашиваете у актера что-то, а затем говорите тому же актеру сделать что-то на основе того, что он вам сказал.
PS Я предположил, что у вас есть распределенная система, потому что вы решили использовать модель Actor.