|
|
|
NHibernate. Рефлексивная (деревянная) связь.
|
|||
|---|---|---|---|
|
#18+
Добрый день, коллеги! Если с мэппингом рефлексивной связи вроде все понятно Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Например, читал интересную статейку нашего соотечественника, внимал тонкостям, готовился воплотить "в железо", но комментарии в конце нее меня убили. Гость: "Так вообще делать нельзя. Будут дикие тормоза при работе с такими деревьями. Нужно использовать паттерн NestedSet!" Автор статьи: "Большое спасибо за совет. Сейчас буду смотреть что можно сделать в этом направлении :)" ( первоисточник: http://slynetblog.blogspot.com/2010/01/trees-and-nhibernate.html) Так как же надо и как не надо работать с рефлексивными структурами в NHibernate? Каким рекомендациям от лучших собаководов внимать? Где искать пресловутый "паттерн NestedSet"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 15:22 |
|
||
|
NHibernate. Рефлексивная (деревянная) связь.
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 15:38 |
|
||
|
NHibernate. Рефлексивная (деревянная) связь.
|
|||
|---|---|---|---|
|
#18+
SolYUtor, Спасибо! Гугль - великий кладезь знаний! Но я не совсем точно сформулировал свою мысль в первом посте. Скорее меня больше интересует, как обойтись без извратов типа NestedSet. Еще меня поражает, с какой легкостью апологеты ORM готовы ломать и кроить структуры БД в угоду своим целям. Ведь для них БД - всего лишь досадный довесок доменной модели, которая пока что не умеет хранить себя сама. На самом деле - БД - это СВЯТЫНЯ! В ней должно быть сердце предметной области. К тому же вовсе не обязательно, что Ваше приложение (использующее ORM) будет эксклюзивным клиентом БД. Кстати, оракл имеет прекрасный инструментарий для обработки рефлексивных структур, типа "CONNECT BY PRIOR". Не попадалось ли Вам в этой связи чего полезного для NHibernate в Гугле? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 16:36 |
|
||
|
NHibernate. Рефлексивная (деревянная) связь.
|
|||
|---|---|---|---|
|
#18+
Курдль, Во-первых, касательно вашего наезда на ORM. Вы определитесь со своей ориентацией: data-centric или domain-centric. Апологеты Domain Driven Design не издеваются над БД. ORM и применяемые способы сохранения объектов - вполне разумный компромисс. По-крайней мере, БД остаётся нормализованной. Во-вторых, хранения деревьев - это в первую очередь грабли реляционных баз данных. И когда необходимы задачи в духе выбрать всю ветвь от корня, выбрать ветвь ниже данного узла и т.д. - без дополнительных извратов не обойтись. Можете не эту тему ознакомиться с трудами апологета баз данных Джо Селко. А для NHibernate, если дерево маленькое - можете тупо грузить весь список в сессию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 17:14 |
|
||
|
NHibernate. Рефлексивная (деревянная) связь.
|
|||
|---|---|---|---|
|
#18+
SolYUtor, Прошу извинить меня всех поклонников ORM! Я немного злюсь (на себя), когда не в полной мере владею вопросом и не могу быстро найти решение :) Так все же, что делать, если дерево не маленькое? Использовать Lasy Load? В принципе, я не вижу крамолы в том, чтобы строить дерево на сервере приложений, а не пытаться "вытянуть" его изощренным SQL- или NHibernate-запросом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 18:01 |
|
||
|
NHibernate. Рефлексивная (деревянная) связь.
|
|||
|---|---|---|---|
|
#18+
КурдльSolYUtor, Так все же, что делать, если дерево не маленькое? У меня нет ответа на ваш вопрос, т.к. тип и сложность применяемых велосипедов полностью зависит от вашей задачи. Среди вариантов, которыми можно отделаться дёшево, на ум приходит только следующее: - Попробовать оставить только голый Lazy Load. Авось вас устроит производительность. - Если надо обработать много узлов - загрузите их все в сессию. - Кеш второго уровня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 21:23 |
|
||
|
|

start [/forum/topic.php?fid=17&fpage=55&tid=1351189]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
67ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
41ms |
get tp. blocked users: |
2ms |
| others: | 261ms |
| total: | 419ms |

| 0 / 0 |
