Я использую CQRS для приложения, которое я создаю (онлайн-дискуссионная система со сложной бизнес-логикой), и я достиг той части реализации, которая меня беспокоит.
Как я должен обрабатывать просмотры страниц? Если пользователь просматривает ветку, я хочу это отслеживать. Поскольку я хочу отслеживать это, следует создать команду и событие и связать их с совокупным корнем, отвечающим за просматриваемый объект (например, UserViewsThread и UserViewedThread соответственно). Но это кажется в значительной степени неэффективным - кроме этого, нет причин использовать совокупный корень во многих случаях использования дискуссионной системы (просмотр форумов/тредов). Теперь, когда я представляю это, у меня будет дополнительная диспетчеризация команд и публикация событий при каждом отдельном представлении страницы, что, в свою очередь, отвечает за «буферизацию» агрегата потоков, сериализацию моего события и отправку его в мое событие. издатель.
Должен быть лучший способ сделать это. Я думал о том, чтобы, возможно, сделать так, чтобы мой объект контроллера мог отправлять события, но, минуя мой агрегат, я больше не могу привязывать поведение к просмотру страницы.
Другая возможность - идея использовать это как способ аутентификации моего пользователя. Командам UserViewsThread и UserViewsForum будет разрешено вызывать исключение проверки подлинности, чтобы мой контроллер знал, что пользователь не может выполнить это действие. Но если бы их нужно было преобразовать в события и сохранить в моем хранилище событий, мы говорим о нескольких событиях, создаваемых при каждом просмотре страницы, что может очень сильно снизить производительность (каждый просмотр страницы приводит к транзакция базы данных... тьфу) и управление ресурсами.
Что думает твой парень?