document db — денормализованные ссылки — лучшая практика

Yo - это не проблема ravendb как таковая - это еще один вопрос дизайна, относящийся к документам dbs в целом.

Так что я использовал DenormalizedReference совсем немного, и мне пришло в голову, что во многих местах это делает DDD довольно сложным.

Итак, скажем, например, у меня есть объект с дочерней коллекцией:

 List<DenormalizedReference<SomeType>>

Эта дочерняя коллекция создается, когда родительский экземпляр создается с помощью перегруженного конструктора, принимающего List<SomeOtherType>

теперь - в ctor я хотел бы создать этот список из передаваемой коллекции SomeOtherType - это означает, что мне нужно будет создать новый SomeType для каждого SomeOtherType.

Без передачи DocumentSession в мой домен - чего я не собираюсь делать - это не сработает, потому что при сохранении родительского AR мы теряем свойства каждого дочернего объекта, кроме Id и Name.

Как все остальные справляются с этим?


person Community    schedule 20.08.2011    source источник


Ответы (1)


Вы не можете этого сделать. Вернее, вы не должны этого делать.

Есть несколько способов решить эту проблему, обычно используя статический шлюз для получения сеанса, но проблема в том, что этот подход создает ленивую загрузку коллекции со всеми вытекающими отсюда проблемами.

RavenDB был специально разработан, чтобы избежать подобных проблем. И вы можете включать элементы, чтобы избежать возврата к серверу, но вы не должны пытаться так прозрачно перемещаться между идентификаторами и типами.

person Ayende Rahien    schedule 21.08.2011
comment
Итак, использование «Включает» — лучший способ добиться того, что мне нужно? Я думаю, что на самом деле я не использую RavenDb в полной мере, цепляясь за некоторые реляционные концепции. реальная ценность достигается, когда вы идете по полному маршруту ddd/cqrs, по крайней мере, для более крупного домена. Ты бы согласился с этим? - person ; 21.08.2011
comment
Да нет. Это действительно зависит от того, какой у вас env и как вы его используете. Включения и идентификаторы — это один из способов решения проблемы ссылок, денормализованные ссылки — другой. У них разное соотношение затрат и выгод, в зависимости от того, что мы делаем и как мы используем вещи. - person Ayende Rahien; 21.08.2011