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)


arrow_upward
4
arrow_downward

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

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

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

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