Два вопроса 1) Как модель совокупности и ссылка между ними 2) Как организовать/хранить события, так что они могут быть получены эффективноEvent Sourcing - Совокупное моделирование
Возьмите этот типичный случай использования в качестве примера, мы имеют Order и LineItem (они представляют собой совокупность, Order - это совокупный корень) и агрегат продукта. Поскольку LineItem должен знать, какой продукт, так что есть два варианта: 1) LineItem имеет прямую ссылку на агрегат продукта (что кажется не лучшей практикой, поскольку это нарушает идею агрегата, являющегося границей консистенции, потому что мы можем обновлять агрегат продукта непосредственно из Агрегат заказа) 2), тогда LineItem имеет только ProductId.
Похоже, что второй вариант - это путь ... Как вы думаете, что здесь?
Однако возникает другая проблема, связанная с построением модели чтения/просмотра заказа. В этой модели представления заказа он должен знать, какие продукты находятся в заказе (то есть ProductId, Type и т. Д.). Типичным примером использования является отчет, и CommandHandler также может использовать этот объект Product для выполнения логики, например, существует ли слишком много определенных продуктов и т. Д. Чтобы это сделать, учитывая тот факт, что эти данные находятся в двух отдельных агрегатах, тогда мы нужны 1+ обмены базами данных. Поскольку мы используем события для построения модели, поэтому псевдокод выглядит ниже 1) для данного идентификатора заказа (guid, идентификатор агрегата заказа) мы загружаем все события для него; - 1-й доступ к базе данных 2) затем создайте агрегат заказа, затем мы знаем, к какому ProductId относятся в Order; 3) для списка ProductIds мы загружаем для него все события; - 2-й доступ к базе данных
Если мы построим действительно большой график объектов (множество разных агрегатов), то это может закончиться еще несколькими доступом к базе данных (каждый из которых медленный) ... Какова ваша идея здесь?
Благодаря