Я давно пользуюсь DDD, так что меня устраивает идея агрегатов.Сначала у меня были проблемы с тем, чтобы не использовать / сохранять ссылки на другие корневые агрегаты, но я думаю, что я на борту ... так:
- Хранение корневого агрегата как одного документа.... check
- Использование денормализованных ссылок, содержащих свойства, которые не изменяются или изменяются редко .... check
Для случаев, когда я действительно хочу иметь полную ссылку на другуюЯ понимаю, что для корневого агрегата рекомендуется сохранять ссылку на его идентификатор и использовать клиентский API RavenDB Включает для эффективного извлечения всех объектов.
Это обрабатывает часть данных, чтоЯ не видел лучший способ справиться с этим в моем классе сущностей:
- Иметь свойства Product и ProductId в моем классе, используя [JsonIgnore] на Product , чтобы гарантировать, что он не будет сохранен с документом.
- Полный граф объектов можно затем склеить обратно в хранилище (используя API Включает для эффективности) или я могу внедрить сервис в объект, который будет извлекать Product лениво (возможно N + 1 попадание)
- Склейте его вместе в ViewModel.Мне не нравится эта идея, поскольку я могу получить неожиданную ссылку NULL в домене, если не использовать ее правильно.
- Какой-то другой очевидный способ, которого я не вижу?
Мысли