|
|
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Уважаемые спецы! Подскажите, как люди выбирают из базы коллекцию объектов, если объект содержит другие объекты? Вот например, объект класса Документ, содержит в себе коллекцию объектов класса СтрокаДокумента. В базу я их замапплю в две таблицы Documents и DocumentRows, связь между ними один ко многим. А вот теперь я хочу выбрать на клиента коллекцию объектов Документ. Как мне такое проделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2007, 20:58 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Атас какой. С чем это ты работаешь? "замаплю", "объекты", "коллекции" Это ты бросай. Тут тебе за объектный подход башку живо открутят и заставят Кодда читать. (Таблички, связи, PK/FK - это понятно) Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 03:16 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Подсказка В базе не хранятся объекты В базе хранятся их данные ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 03:58 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
уважаемый Fuzzy, не слышали ли про такую технологию в Java как Hibernate ? Очень советую поглядеть на принцип её устройства ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 04:53 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Парни, ну чего накинулись? Я задал простой вопрос, хотел бы получить простой ответ. Вам что, никогда не нужно было вытянуть из базы коллекцию объектов, данные которых хранились бы в нескольких таблицах, как я выше описал? Про гибернейт конечно слышал, но меня интересуют технические подробности -- какие именно селекты выполняются? Может, кто ссылкой поможет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 10:38 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
авторВам что, никогда не нужно было вытянуть из базы коллекцию объектов, данные которых хранились бы в нескольких таблицах, как я выше описал? Можете себе представить - никогда. Данные вытягиваю ежедневно, а вот "коллекции обьектов" - нет. авторкакие именно селекты выполняются? Те, которые напишешь. Nobody faults but mine... (LZ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 12:36 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
FuzzyПарни, ну чего накинулись? Я задал простой вопрос, хотел бы получить простой ответ. Вам что, никогда не нужно было вытянуть из базы коллекцию объектов, данные которых хранились бы в нескольких таблицах, как я выше описал? Про гибернейт конечно слышал, но меня интересуют технические подробности -- какие именно селекты выполняются? Может, кто ссылкой поможет? Решение зависит от СУБД. Оракл поддерживает хранение и извлечение объекта с вложенной коллекцией одним запросом. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 13:05 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Ещё раз, прочитайте мой вопрос внимательно -- прошу поделиться опытом тех, кто когда-нибудь сталкивался с необходимостью выбрать из базы коллекцию объектов, и, не пользуясь гибернейтом или чем-то подобным, сам писал для этого селекты. Тех же, кто этого никогда не делал, а также тех, кто не понимает, зачем это нужно, а также тех, кто вообще ничего не знает и не понимает, прошу тему не засорять. (Может, я не том разделе пишу? Уважаемые модераторы, прошу перекинуть тему туда, где на неё могут ответить конструктивно! Спасибо!) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 13:09 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
mcureenab, спасибо за ответ! А если база не поддерживает такой прикол, то как тогда? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 13:11 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
JedaitoПодсказка В базе не хранятся объекты В базе хранятся их данные Данные, это абстракция. Для хранения данных, их нужно определённым образом организовать. Объект - область памяти и методы работы с ней. В реляционной БД объекты - записи в таблицах, методы - API для работы с курсорами и SQL запросы. Сохранение состояния объета в БД означет копирование значений части атрибутов этого объекта в другой объект, который сохраняется в БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 13:20 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Fuzzyвыбрать из базы коллекцию объектов, и, не пользуясь гибернейтом или чем-то подобным, Fuzzyобъект класса Документ, содержит в себе коллекцию объектов класса СтрокаДокумента. В базу я их замапплю в две таблицы Documents и DocumentRows, связь между ними один ко многим Каждый объект Document должен уметь сам загрузить свои DocumentRows (т.е. выполнить select * from DocumentRows where DocumentID=@id, обойти в цикле результат, по каждой записи создать DocumentRow и поместить в свой список) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 13:35 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
mcureenabСохранение состояния объета в БД означет копирование значений части атрибутов этого объекта в другой объект, который сохраняется в БД. Это её личное дело, что она у себя создаёт. От пользователя она должна принять, и пользователю вернуть, состояние объекта в определённый момент времени. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 13:40 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
FuzzyА если база не поддерживает такой прикол, то как тогда? Положим есть тип. Код: plaintext 1. 2. 3. Преобразуем объектное представление данных в реляционное. Получаем две таблицы: Код: plaintext 1. 2. Где oid - системный идентификатор объекта, owner - ключ для связи коллекции и её владельца. Чтобы реконструировать из БД объект придётся написать два запроса. Код: plaintext 1. 2. 3. 4. into - это ключевое слово PL/SQL означает, что запрос выполняется и возвращает строку в указанную переменную (тут o.a или o.b). bulk collect - означает, что в o.b будут выбраны все записи, возвращаемые запросом. Если и этого "прикола" нет в той или иной форме, придётся для выборки записей в коллекцию использовать цикл явно. ОРСУБД Оракл работает примерно так же, только скрывает эти тонкости от пользователя. С Hibernate не работал, но полагаю, что и он работает примерно так же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 13:42 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
mv... Тут тебе за объектный подход башку живо открутят и заставят Кодда читать. Форум называется "Проектирвание БД", и не ограничивается только реляционными БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 13:46 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Jedaito, mcureenab, спасибо за ответы! Однако, они касаются восстановления из базы ОДНОГО объекта, содержащего коллекцию подчинённых объектов. Я согласен, для одного объекта способ нормальный: выполнил селект с фильтром для главного объекта, создал главный объект, затем выполнил второй селект с фильтром по главному объекту для подчинённых объектов, пробежался по нему циклом и создал коллекцию подчинённых объектов (для ясности -- коню понятно, что заниматься этим должен уметь сам главный объект). Но вопрос-то был о том, что мне нужно получить коллекцию "ГЛАВНЫХ" объектов, т.е. каждый из которых содержит ещё по коллекции подчинённых объектов, а может, и не по одной! Легко представить, во что выльется для бедного SQL-сервака такое дело -- по запросу для каждой подчинённой коллекции, верно? Т.е. куча мелких запросов, на которых он и ляжет. Как это победить, я примерно представляю, но не хотелось бы велосипед изобретать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 15:13 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Рекомендую посмотреть библиотеку CSLA (www.lhotka.net).В довесок к ней есть прекрасная книга. Меня она устраивает гораздо больше, чам Hibernate и иже с ними. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 15:27 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
SeVa, спасибо за ответ, но мне не нужна сейчас сторонняя библиотека. Я предпочитаю сам всё написать для своих объектов -- мне виднее, как их надо правильно мапить в базу, а чего там библиотека делает, Бог её знает. Заходил на их сайт, но не нашёл, где там описывается поведение этой либы в моём примере, может, дадите более конкретную ссылку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 15:37 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
FuzzyНо вопрос-то был о том, что мне нужно получить коллекцию "ГЛАВНЫХ" объектов Свести задачу к предыдущей. Сделать объект, например, Журнал документов. FuzzyЛегко представить, во что выльется для бедного SQL-сервака такое дело -- по запросу для каждой подчинённой коллекции, верно? Т.е. куча мелких запросов, на которых он и ляжет. Много маленьких запросов из параллельных потоков может оказаться даже наоборот быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 17:24 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Jedaito, откуда мнение, что много мелких запросов быстрее, чем один большой? Я раньше думал, что очень наоборот. Серверу же нужно время, чтобы запрос 1) получить по сетке, 2) распарсить, 3) построить план выполнения, 4) запустить и т.д. и т.п. Если запрос один, то всё это нужно сделать один раз. А если их тысячи, то соответственно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 18:11 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
FuzzyJedaito, откуда мнение, что много мелких запросов быстрее, чем один большой? Я раньше думал, что очень наоборот. Серверу же нужно время, чтобы запрос 1) получить по сетке, 2) распарсить, 3) построить план выполнения, 4) запустить и т.д. и т.п. Если запрос один, то всё это нужно сделать один раз. А если их тысячи, то соответственно. 1. Много маленьких запросов можно поместить в хранимую процедуру и выполнять их на стороне сервера, так что 1,2,3 делать каждый раз не придётся. Кроме того, запрос иногда можно выполнить сразу для массива id объектов, так что накладные расходы значительно сократятся. 2. Что мешает в одном запросе выбрать записи сразу для множества главных объектов, а на стороне клиента рассортировать их по своим коллекциям? 3. Коллекции коллекций это слишком сложно. Используй декомпозицию и ссылки. Пусть объект содержит коллекцию ССЫЛОК на объекты, которые в свою очередь содержат коллекции. Оракл, например, подерживает сети объектов и умеет выбирать объекты по ссылкам ещё до того, как они понадобятся в программе. На клиенте, если потребуется, эту модель можно преобразовать в более подходящую. 4. Не изобретай велосипед. Если тебе что то непонятно, это не значит, что это плохо или не то. Гораздо проще понять существующее отлаженное решение, чем придумать и реализовать без ошибок своё, тем более, что знаний в этой области у тебя ещё маловато. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 18:53 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
1.Что делает эта "либа" подробно описано в книге автора.Можно скачать CSLA, там есть учебный проект - PTracker, в котором показаны основные моменты. 2. В отличии от всех ORM, работа с БД полностью прозрачна и построена на хранимых процедурах. 3. Все, что необходимо в твоем случае с CSLA реализуется просто, и позволяет работать именно с бизнес объектами, а не с кальками структуры БД.Необходимо будет создать 4 объекта: - class Documents : Csla.BusinessListBase<Documents, Document> (список Документов) - class Document : Csla.BusinessBase<Document> (сам Документ) со свойством DocumentRows - class DocumentRows : Csla.BusinessListBase<DocumentRows, DocumentRow> - class DocumentRow : Csla.BusinessBase<DocumentRow> и 2 хранимые процедуры: - для списка документов - и деталировки по DocumentId ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 19:02 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
mcureenab 1. Много маленьких запросов можно поместить в хранимую процедуру и выполнять их на стороне сервера, так что 1,2,3 делать каждый раз не придётся. Кроме того, запрос иногда можно выполнить сразу для массива id объектов, так что накладные расходы значительно сократятся. Не понял, как это сделать практически? mcureenab 2. Что мешает в одном запросе выбрать записи сразу для множества главных объектов, а на стороне клиента рассортировать их по своим коллекциям? Так и собираюсь сделать, если не найдётся способ лучше mcureenab 3. Коллекции коллекций это слишком сложно. Используй декомпозицию и ссылки. Пусть объект содержит коллекцию ССЫЛОК на объекты, которые в свою очередь содержат коллекции. Ясное дело, что только так и надо. Но всё равно придётся по крайней мере один раз создать подчинённые объекты, вытянув данные из базы. Вопрос, как это сделать с минимальными затратами. mcureenabОракл, например, подерживает сети объектов и умеет выбирать объекты по ссылкам ещё до того, как они понадобятся в программе. На клиенте, если потребуется, эту модель можно преобразовать в более подходящую. Я не собираюсь работать с Ораклом, к сожалению. Да и не хочу привязываться к какой-то определённой базе. Хочется универсального решения, шаблонного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 19:15 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Fuzzy mcureenab 1. Много маленьких запросов можно поместить в хранимую процедуру и выполнять их на стороне сервера, так что 1,2,3 делать каждый раз не придётся. Кроме того, запрос иногда можно выполнить сразу для массива id объектов, так что накладные расходы значительно сократятся. Не понял, как это сделать практически? Смотри конкретный API доступа к БД и СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 19:17 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
SeVa, ну и какие селекты для этого будет мутить эта либа? Можно уточнить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 19:18 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
mcureenab Fuzzy mcureenab 1. Много маленьких запросов можно поместить в хранимую процедуру и выполнять их на стороне сервера, так что 1,2,3 делать каждый раз не придётся. Кроме того, запрос иногда можно выполнить сразу для массива id объектов, так что накладные расходы значительно сократятся. Не понял, как это сделать практически? Смотри конкретный API доступа к БД и СУБД. А в общем случае? Вот нужно мне вытянуть 150 главных объектов. Что мне в хранимку передать? И что она мне вернёт? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 19:20 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Мутить будешь сам-две процедуры, которые я написал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 19:22 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
SeVa, ещё раз:) Я спросил не про то, что я буду делать, а про то, какие селекты будет сервер выполнять, для этой операции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 19:25 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Процедуры могут быть разные и с любыми параметрами для кажого конкретного случая.Никто не мешает написать и одну общую процедуру, все на усмотрении разработчика.На общие вопросы могут быть только общие ответы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 19:26 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Хм, мне казалось, пример вполне конкретный. Ну да ладно. Спасибо за помощь, SeVa! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 19:30 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
FuzzyЯ не собираюсь работать с Ораклом, к сожалению. Да и не хочу привязываться к какой-то определённой базе. Хочется универсального решения, шаблонного. Чем тебе не шаблонное решение? Код: plaintext Объектный SQL скоро будет реализован во всех коммерческих СУБД, и твоё шаблонное решение уйдёт в небытие, как худше из всех возможных, поскольку в общем случае API БД никакой оптимизации в твоей задаче не допускает но тебе придётся ориентироваться на него. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 19:31 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
mcureenabОбъектный SQL скоро будет реализован во всех коммерческих СУБД, и твоё шаблонное решение уйдёт в небытие, как худше из всех возможных "... а при коммунизме всё будет зае*ись, он наступит скоро, надо только подождать..." (с)ГрОб :)) А щас всё-таки надо работать с API БД как есть. Так что насчёт хранимок, как ими воспользоваться для решения моей задачи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 19:36 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
PS. Осталось только угадать твою структуру и выслать тебе готовое решение.Возможный вариант я дал.Рекомендую еще зайти на тамошний форум, дабы посмотреть, как народ общается в подобных местах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 19:43 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
FuzzyА щас всё-таки надо работать с API БД как есть. А какой есть? FuzzyТак что насчёт хранимок, как ими воспользоваться для решения моей задачи? Откуда мне знать? Может твоя БД хранимые процедуры не поддерживат? А вообще, с ХП всё точно так же, только SQL запросы храняться на стороне сервера. ХП возвращает массивы записей, которые нужно рассортировать по прикладным объектам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 19:47 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
SeVa, ну причём тут готовое решение? Хочется просто понять, сколько и каких СЕЛЕКТОВ будет выполнять сервер для того, чтобы выбрать на клиента коллекцию объектов, каждый из которых сам содержит коллекцию объектов. Какие бы ни были там процедуры, SQL сервер всё равно ведь будет выполнять именно запросы. И не получится ли, что запросов будет 1 плюс ещё по запросу на каждый "главный" объект для выборки соответствующих подчинённых? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 19:50 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
mcureenab FuzzyТак что насчёт хранимок, как ими воспользоваться для решения моей задачи? Откуда мне знать? Может твоя БД хранимые процедуры не поддерживат? А вообще, с ХП всё точно так же, только SQL запросы храняться на стороне сервера. ХП возвращает массивы записей, которые нужно рассортировать по прикладным объектам. Я понял. Короче говоря, выходит, что нормальный способ будет такой: 1. Зарядить запрос по таблице с главными объектами с нужным фильтром. 2. Зарядить запрос по таблице с подчинёнными объектами, как фильтр использовать запрос с главными объектами. 3. Мчаться циклом по резалтсету главных объектов, для каждой записи: а) создаём новый главный объект б) мчимся циклом по резалтсету подчинённых объектов с текущей позиции, пока ключ бьёт с соответствующим главным объектом, создаём новые подчинённые объекты, пихаем в коллекцию. Типа как-то так, видимо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 19:57 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
FuzzySeVa, ну причём тут готовое решение? Хочется просто понять, сколько и каких СЕЛЕКТОВ будет выполнять сервер для того, чтобы выбрать на клиента коллекцию объектов, каждый из которых сам содержит коллекцию объектов. Какие бы ни были там процедуры, SQL сервер всё равно ведь будет выполнять именно запросы. И не получится ли, что запросов будет 1 плюс ещё по запросу на каждый "главный" объект для выборки соответствующих подчинённых? В лучшем случае для множества объектов с одной вложеной коллекцией нужно выполнить 2 запроса. Один за множеством главных объектов, второй за вложенными коллекциями. В худшем 2x<количество выбираемых объектов>, хуже только по дури можно сделать. Фактическое количество запросов в данном случае зависит от возможностей API СУБД и твоего таланта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 20:00 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Fuzzy... 3. Мчаться циклом по резалтсету главных объектов, для каждой записи: а) создаём новый главный объект б) мчимся циклом по резалтсету подчинённых объектов с текущей позиции, пока ключ бьёт с соответствующим главным объектом, создаём новые подчинённые объекты, пихаем в коллекцию. Типа как-то так, видимо? Типа того. Пара замечаний. 1. В запрос подчинённых коллекций нет нужды тащить таблицу с главными объектами, если тебе известны их id, а они тебе известны, поскольку ты их выбрал первым запросом. Но в конкретном случае это может быть не важно. Если уж плясать в этом направлении, то можно одним запросом выбрать данные из таблиц с главными и подчинёнными объектами, правда размер выборки в байтах может ощутимо возрасти. 2. Твои циклы подразумевают, что строки в запросах будут предварительно отсортированы по id объекта. Это лишняя трата времени, не проще, но эффективенее сразу создать все главные объекты, а затем рассортировать по ним подчинённые записи, используя, например, хэш таблицу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 20:10 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Не совсем так, mcureenab, в запрос по подчинённым объектам я собираюсь передавать отнюдь не таблицу, а запрос по главным объектам. И по двум рекордсетам я буду бежать одновременно, и фетчить их тоже одновременно. Поэтому без сортировки по id не обойтись, конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 20:25 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
FuzzyНе совсем так, mcureenab, в запрос по подчинённым объектам я собираюсь передавать отнюдь не таблицу, а запрос по главным объектам. И по двум рекордсетам я буду бежать одновременно, и фетчить их тоже одновременно. Поэтому без сортировки по id не обойтись, конечно. Дело твоё. Так тоже можно. Не факт, что будет производительнее, но определённо проще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 20:30 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Все зависит от задачи. У меня используется только выборка списка с отложенным чтением деталировки.Например, строиться только список товарно-материальных ценностей, упаковки подгружаются, если пользователь раскрывает вложенный грид(Баловать их не стоит.Пусть выбирает только то, что ему нужно.). Код: public PackageList Packages { get { CanReadProperty("_packages", true); if (_packages == null) _packages = PackageList.GetPackageList(_inventoryItemUid);//вызов проц и построение списка упаковок по Uid ТМЦ return _packages; } } Если нужно все сразу, народ изгаляется как может.Варианты обсуждаются в форуме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 20:33 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Отлично, значит, пока имеем два способа: 1) "Идиотский": 1 запрос по главным объектам, и по запросу для каждого главного объекта по подчинённым объектам. 2) "По запросу на коллекцию": 1 запрос по главным объектам, и 1 запрос по подчинённым объектам, бежим по ним одновременно. Ну можно ещё предложить 3) "Денормализованный": 1 общий запрос по главным и подчинённым объектам. Подойдёт в крайнем случае, если подчинённых коллекций одна. Если больше, то это будет смерть. Ещё есть варианты? А как Hibernate делает, кто знает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 20:35 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
SeVa, ты описал "идиотский" способ по моей классификации :) Не всегда можно отложить загрузку подчинённых объектов, иногда хочется всё и сразу. А на каком форуме народ изгаляется на эту тему, подскажи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 20:37 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Хех. Я тут видал, программа за КАЖДЫМ атрибутом в БД обращалась. Обоснование было - канал медленный, и если нужен только конкретный атрибут, то тянуть весь объект будет накладно. Я сомневаюсь, но, полагаю, автор знал о чём говорит. Сам делал объектный кэш на PL/SQL. Методы и SQL запросы генерились по шаблону автоматически для каждого класса объектов. Чтобы не усложнять шаблон и оставаться в его рамках, атрибуты объектов тянул только по id. Если требовался запрос не по id, то сначала выбирал список id, а потом типовыми методами подружал сами объекты по одному. Благо таких необъектных запросов было совсем чуть и претензий на всеобщность тоже не было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 20:59 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Скучно.Первый раз слышу, что при отложенной выборке одновременно "бегут" и по подчиненным объектам.Я четко оговорился, что все зависит от задачи.Мой вариант, как раз для пользователей идиотов, которым вряд ли нужна деталировка для массы записей, ВЫБОРКА ПРОИСХОДИТ ТОЛЬКО ПО ЗАПРОСУ.При необходимости я сделаю все в одной процедуре.Если тебе нужно насиловать бд и загромождать экран-флаг в руки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 21:06 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
SeVa, а я предпочитаю иметь на клиенте полноценный объект, а не полузагруженный. И вообще, мало ли какие бывают расклады. Может, юзер желает в гриде видеть кроме главного объекта ещё и какие-то данные по подчинённым объектам, какое-нибудь текстовое значение через запятую, например. Или агрегат какой-нибудь хитрый. Что тогда? Переходим от объектов к рекордсетам? А масса записей на клиенте по определению не нужна, нужно ровно столько, сколько юзер может просмотреть, и не так уж это много, можно и с деталями дёрнуть с сервака. Хотя, конечно, "случаи разные бывают", и это уже флейм, ПМСМ. Так что насчёт форума, где ещё народ эту тему обсуждает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 21:13 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
А если ..., а если ..., а если пользователь пива захочет. За твоей фантазией трудно угнаться.На словоблудие может быть много ответов.Задай вопрос в форуме "Просто треп" (есть такой здесь). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 21:27 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Пользователь -- это бог. Захочет пива -- придётся бежать, ведь мы же работаем за деньги :)) SeVa, ты упоминал форум, где народ обсуждает похожую тему. Это был "Просто трёп"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 21:36 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
FuzzySeVa, а я предпочитаю иметь на клиенте полноценный объект, а не полузагруженный. Нуууу... Есть ещё ленивая инициализация и многие её успешно используют. Иногда запросу может пойти на пользу, ибо пользователь быстро получит первые записи, а не будет ждать, когда пол БД на клиента подгрузится. Опять же ускорение, если большая часть объектов не будет использована. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 21:51 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
mcureenab, не вижу проблемы -- открыл два или сколько надо запросов, собрал объект, показал клиенту, он его сразу видит. Переходим к следующему объекту. Никто ничего не ждёт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 22:00 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Fuzzymcureenab, не вижу проблемы -- открыл два или сколько надо запросов, собрал объект, показал клиенту, он его сразу видит. Переходим к следующему объекту. Никто ничего не ждёт. Тебе виднее, конечно. Только на открытие запроса с сортировкой время нужно. Если коллекции большие а критерий отбора слабый, пользователю долго ждать придётся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 22:18 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
mcureenab, ты прав, прибавляется время на выполнение отсортированного запроса по подчинённым объектам. Конечно, загрузка с отсроченной детализацией быстрее первую запись покажет, это пожалуй верно. А что будет, если юзер начнёт по строкам грида щёлкать -- тут уж лучше сразу на клиенте всё иметь, чем для каждого щелчка запрос выполнять. А? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 22:23 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
FuzzyА что будет, если юзер начнёт по строкам грида щёлкать -- тут уж лучше сразу на клиенте всё иметь, чем для каждого щелчка запрос выполнять. А? Конечно лучше. Только если пользователь дождётся, когда ему в гриде пощёлкать разрешат. Лучше (в разумных пределах) увеличить время ожидания реакции на один клик (пользователь и не заметит, что программа дёрнула БД), и быстро выполнить основной запрос, чем регулярно зависать на выполнении всего запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 22:34 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Вот тут не соглашусь -- мне кажется, лучше юзеру подождать, когда сделается рефреш, а потом просматривать грид без тормозов, чем раздражаться, когда детали с задержкой показываются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 22:41 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
FuzzyВот тут не соглашусь -- мне кажется, лучше юзеру подождать, когда сделается рефреш, а потом просматривать грид без тормозов, чем раздражаться, когда детали с задержкой показываются. Сделай так, чтобы детали без задержки отображались иначе и твой мегазапрос будет работать очень долго. Задержку в 0.5 сек на клик пользователь не заметит. Задержка в 5 сек на все 10 записей будет слегка раздражать. На задержку 50 сек пользователь скажет, что программа не работает. Хотя выход и тут есть. Запусти фоновую нить, которая, пока пользователь втыкает на результат запроса, доберёт из БД детали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2007, 23:18 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Скажем, на mssql можно было бы выполнить один запрос for xml explicit и получить в xml обьекты с вложенными коллекциями, а на клиенте только распарсить полученный xml. Не факт, что будет быстрее - но наверняка будет прозрачнее и универсальнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 04:53 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
У меня сделано так, в гриде лежат те поля по которым чаще всего пользователь ищет запись, и только они и загружаются из базы. При выборе записи все остальное подгружается - вполне быстро работает. Если появляются поля, которые тоже нужны в гриде - они туда добавляются. А поиск записи путем открытия каждой - это неправильный метод и если пользователь так делает - пусть ждет. ИМХО. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 07:41 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
В варианте, который я описал, в 99,99999% пользователю информация о деталировке не нужна.Это дополнительная опция.Если не доходить до маразма,как в случае с загрузкой по одному полю(интересно узнать какой размер пакетов у них использовался для передачи!), то в большинстве случаев пользователь не заметит отдельной загрузки. Кроме допустимого времени реакции, существует еще такое понятие, как надежность системы. Для всех любителей абстрактных рассуждений вопрос. Что может произойти в блокировочнике, если одновременно выполняются два запроса: первый на выборку,второй на апдейт по полю с некластерным индексом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 11:11 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
И тишина........Как быстро страсти улеглись.Ответ простой-мертвая блокировка.Думаю, когда выше ее вероятность любители показывать все и сразу сообразят сами.Заказчика больше устроит неторопливая система, чем не работающая совсем. Одно дело, когда Access применяется для работы с зоопарком из нескольких разнородных источников данных, и совсем другое, при работе нескольких сотен пользователей одновременно. Другой аспект-это разработка и дальнейшее применение объектов.Какой вариант вы выбирите, если их тоже будет несколько сотен:генерация в несколько кликов простых объектов с последующей их композицией или ручное конструирование монстров с вылизыванием микросекунд? Объект должен содержать и выполнять только то для чего он предназначен. В шаблононе MVP, который мы применяем,рекомендуется использовать раздельные объекты, что позволяет конструировать интерфейс из готовых блоков, выделить отдельно логику бизнес процессов, автоматизировать тестирование и прочие. Пример. Компании, отделы, физ.лица имеют много общих сущностей-адреса, контакты, телекомы, комментарии и тд.В каких случаях нужна вся эта информация сразу? Посмотрите msdn в разделе патерны.Какие там рекомендации на основе решений, которые применяются не один год. Оптимизация нужна только в очень крайних случаях.Если будут провалены сроки никого не будет интересовать маленький кусок, где все оптимизировано до блеска. PS. В Axapte еще более "идиотский" способ-открытие курсора с чтением по одной записи.Вариант не очень идеальный, но это работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 19:20 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
SeVa, ты сейчас с кем разговариваешь? :) В теме был поднят вопрос, как алгоритмически выбрать из базы коллекцию объектов, каждый из которых в свою очередь содержит ("ссылается на") коллекцию объектов. А зачем это вообще нужно, и можно ли так делать -- это уже другой вопрос. К сожалению, ничего нового я для себя из темы не узнал, что кажется мне очень странным. Неужели никто не может прояснить работу того же гибернейта в таких случаях? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 19:41 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Правильно поставленый вопрос и отсутствие каши в голове- половина успеха.Тебе здесь не раз объясняли, что в БД объекты не хранятся.ORM предназначен специально для того, чтобы не составлять вручную запросы.Объснять тебе как работает Hibernate - пустое занятие.За сим все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 20:46 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
SeVaПравильно поставленый вопрос и отсутствие каши в голове- половина успеха.Тебе здесь не раз объясняли, что в БД объекты не хранятся.ORM предназначен специально для того, чтобы не составлять вручную запросы.Объснять тебе как работает Hibernate - пустое занятие.За сим все. Объясни другим. Я делал ORM для решения определённой задачи и меня интересуют другие решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2007, 21:25 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
2Fuzzy Напрасно не слушаешь людей, которые дают тебе хорошие советы. SeVa не зря говорил тебе про CSLA. Книга, которая описывает эту библиотеку, содержит помимо прочего очень неплохой материал по проектированию бизнес объектов (приложения вцелом). И хотя и не даст тебе готовый ответ на твой вопрос, но поможет тебе избежать таких вопросов в будущем ("Лучше полчаса потерять, зато, потом за 5 мин. долететь."). А пытаться заменить нехватку общих навыков проектирования/программирования (и, насколько я могу судить, незнание принципов работы с БД) такими вопросами (да ещё потом говорить, что ничего нового не узнал из ответов) пустая трата времени (причем, не твоего). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 04:43 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
SeVa, Oleg Martynenko -- я с вас тащусь просто. Вы нереально крутые. Вы напоминаете мне мастера кун-фу, который на вопрос ученика "как мне освободиться от такого-то захвата" отвечает "главное -- гармония" :)) Не обижайтесь насчёт "ничего нового" -- просто о том, что если есть возможность чего-то не делать, то лучше этого не делать, я знаю и сам. Спасибо за то, что напомнили мне об этом. Вопрос был о другом. Да, ещё -- я НЕ БУДУ ничего покупать. Тем более книг, которые не дают мне ответа на вопрос. Поэтому хватит рекламы, у меня ощущения, что вы этим на жизнь зарабатываете. Прошу вас в эту тему больше не писать. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 09:12 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
FuzzyДа, ещё -- я НЕ БУДУ ничего покупать. Тем более книг, которые не дают мне ответа на вопрос. А зря..., прочитайте хотябы Фаулера "Архитектура корпоративных программных приложений". FuzzyПоэтому хватит рекламы, у меня ощущения, что вы этим на жизнь зарабатываете. Прошу вас в эту тему больше не писать. Спасибо Вот она благодарность за хорошие советы... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 11:18 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
2 Fuzzy Отвечая на вопрос, кратко опишу один из вариантов. По Фаулеру, может существовать глобальная кеш-коллекция объектов или кеш-коллекция на каждый тип/класс. При запросе объекта по ID объект первоначально сканирует в поисках кеш-коллекцию. Если объект не найден в коллекции он создается и загружается в коллекцию из базы. Поисковые запросы в минимальном варианте возвращают список ID, далее происходит опять таки поиск по ID в кеш-коллекции с последующей загрузкой ненайденных из БД. Вложенные(дочерние) коллекции (строки документа) получают техникой Lazy Load. Хочется без Lazy Load - получаем весь граф объекта в виде xml с помощью for xml запроса и десериализуем в объект, но, имхо, это трудоемко и создает множества проблем в "гибком проектировании". Для решения вопросов с параллельными изменениями используется метка последнего изменения (например, поле timestap) и собственная реализация оптимистической блокировки в среднем звене/клиенте. ... Что еще посмотреть кроме Фаулера и Лотки "C# Bussiness Object": Bussiness Logic Toolkit. Это не полноценное ORM-средство, а очень достойный MappingHelper, имхо, на текущий момент лучший. Как раз подходит когда весь CRUD пишется собственноручно и не используется генерацию sql-запросов налету (как в Hibernate, например). http://bltoolkit.net/ http://www.rsdn.ru/article/files/libs/RsdnFrameworkData.xml ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 11:38 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Роман Дынник но, имхо, это трудоемко и создает множества проблем в "гибком проектировании". А почему, кстати? Обоснуйте плз. Имхо это может быть не очень производительно - но уж никак не трудоемко, послал 1 запрос, получил ответ, скормил парсеру. Запросы for xml, если рука набита, шлепаются как блины, тоже ничего трудоемкого тут нет. И в чем проблемы гибкости? Уж xml-то все умеют формировать, если закладываться на xml - скажем, введение сервера приложения пройдет вообще незаметно с точки зрения клиента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 11:54 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Роман Дынник 2 Fuzzy Отвечая на вопрос, кратко опишу один из вариантов. ...поскипано... Хочется без Lazy Load - получаем весь граф объекта в виде xml с помощью for xml запроса и десериализуем в объект ...поскипано... Спасибо за Ваш ответ, да ещё и со ссылкой на первоисточник. Но вопрос звучал так: а шо ж мне делать, ежели мой сервак не возвращает for xml запрос? Другого способа что, не существует? Без xml запроса, который не является пока что стандартом, если мне не изменяет склероз? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 12:03 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Кот МатроскинА почему, кстати? Обоснуйте плз. Имхо это может быть не очень производительно - но уж никак не трудоемко, послал 1 запрос, получил ответ, скормил парсеру. Запросы for xml, если рука набита, шлепаются как блины, тоже ничего трудоемкого тут нет. И в чем проблемы гибкости? Уж xml-то все умеют формировать, если закладываться на xml - скажем, введение сервера приложения пройдет вообще незаметно с точки зрения клиента. Запросы for xml шлепаются как блины только for xml auto. Для десериализации xml в объект чаще требуется for xml explicit или собственная десериализация на стороне клиента, а это уже не как блины (что собственная сериализация, что for xml explicit). Потом, модель от цикла к циклу разработки имеет свойтво меняться - расширяться, дополняться... что неизбежно вызовет переделку либо сериализации, либо for xml explicit для измененных сущностей, в отличии от простых sp-CRUD, которые намного легче автоматом генерится по модели. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 12:07 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
FuzzyСпасибо за Ваш ответ, да ещё и со ссылкой на первоисточник. Но вопрос звучал так: а шо ж мне делать, ежели мой сервак не возвращает for xml запрос? Другого способа что, не существует? Без xml запроса, который не является пока что стандартом, если мне не изменяет склероз? В таком случае, решение может быть таким: Возвращайте несколько выборок (select-ов) из хп, заполняйте таблицы DataSet-а на основе этих выборок, связывайте эти DataTable relation-ми. Далее смотрите сами - использование DataSet/типизированного DataSet как бизнес-объекта, либо DataSet.GetXml() и десериализация в бизнес-объекты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 12:14 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответ, Роман Дынник, правда, я с сишарпом не очень-то знаком. Мне бы лучше примеры на java. Но, тем не менее, правильно ли я понял: 1. Вытягиваем запросом записи для главных объектов в таблицу на клиенте. 2. Вытягиваем запросом записи для подчинённых объектов в таблицу на клиенте. 3. На клиенте мутим уже десериализацию из этих двух таблиц в коллекцию объектов, при помощи преобразования в xml с последующим парсингом. Так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 14:46 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
FuzzyНо, тем не менее, правильно ли я понял: 1. Вытягиваем запросом записи для главных объектов в таблицу на клиенте. 2. Вытягиваем запросом записи для подчинённых объектов в таблицу на клиенте. 3. На клиенте мутим уже десериализацию из этих двух таблиц в коллекцию объектов, при помощи преобразования в xml с последующим парсингом. Так? Исходя из ваших условий, примерно так. Я проецировал ситуацию для .net-а. Исходя из используемых технологий можно найти другие, более оптимальные решения. Например, в oracle - можно xml-запросы выполнять, если брать oracle+java - можно java stored procedure использовать и J-SQL и на стороне БД-сервера POJO-объект создавать и возвращать. Какие средства и технологии вы используете? P/S/ Но все же лучше Lazy Load загрузка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 15:10 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Роман, а чем намного лучше сперва прочитать запросы в таблицы, потом перегнать это в xml, а потом ещё xml парсить, по сравнению с тем способом, что я привёл ранее (параллельно читаем записи из нескольких рекордсетов и сразу на ходу создаём объекты)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 15:19 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
FuzzyРоман, а чем намного лучше сперва прочитать запросы в таблицы, потом перегнать это в xml, а потом ещё xml парсить, по сравнению с тем способом, что я привёл ранее (параллельно читаем записи из нескольких рекордсетов и сразу на ходу создаём объекты)? Ничем. Единственное, если получится сразу легко получить xml нужного для десериализации вида, то автоматически пропадает необходимость реализации маппинга xml->to object или record->to object. Правда модель активной записи (опять же по Фаулеру), которую вы описали, будет всегда каждый раз при необходимости повторного использовании объекта мапить запись на объект, что может весьма сказаться на производительности в случае некоторых алгоритмов (например, длительные расчеты, использующие объекты как источник информации). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 15:49 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Похоже, у Фаулера действительно полезная книга. Скажите, пожалуйста, в ней жёстко си-шарп рассматривается, или в общем? А есть где-нибудь на сети, чтоб скачать? Роман, а зачем я должен буду повторно мапить записи на объекты? Можно пример, чтоб я понял? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 16:08 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Опа, уже нашёл, и скачал. Буду читать, спасибо, Роман! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 16:17 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
FuzzyПохоже, у Фаулера действительно полезная книга. Скажите, пожалуйста, в ней жёстко си-шарп рассматривается, или в общем? А есть где-нибудь на сети, чтоб скачать? В сети по-моему в свободном доступе есть на английском, на сайте автора. Рассматривается все "в общем", примеров на java даже больше по-моему. Роман, а зачем я должен буду повторно мапить записи на объекты? Можно пример, чтоб я понял? я так понял по следующему: Fuzzyи сразу на ходу создаём объекты Потом, как вы тогда будете синхронизовать recordset c объектами? Держать и рекордсет и глобальную кеш-коллекцию... зачем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 16:21 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Роман, наверное, я лучше сперва почитаю Фаулера... потом вернёмся к обсуждению, ок? Потому что пока даже вопроса не могу понять: вот у меня данные в базе, возникла необходимость выбрать на клиента все документы по определённому критерию. Вот я их и выбрал, у меня есть их коллекция, а рекордсеты я бросил после загрузки, зачем они мне? Понятно, что "один и тот же" объект я не буду несколько раз создавать -- если он уже загружался, буду использовать имеющийся инстанс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2007, 16:27 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
SeVaТебе здесь не раз объясняли, что в БД объекты не хранятся. Есть паттерн проектирования Memento - хранитель. Он позволяет отчуждать состояние объекта Originator в объект Memento и помещать его в БД для последующего восстановления состояния исходного объекта Originator. Объект Originator не хранится в БД. Там хранится объект Memento или, если угодно, его копия. Современные СУБД и API позволяют сосредодочиться на проектировании класса Originator. Класс Memento и соответственно тип записей в таблице БД можно получить почти автоматически из спецификации класса Originator. Механизмы получения объекта Memento из объекта Originator, сохранения его в БД, и обратная процедура реализованы на уровне библиотек, так что проектировщик может отождествлять классы Memento и Originator даже на очень низком уровне абстракции. В данном случае автор опустился ниже этого уровня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2007, 15:28 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
mcureenab, непонятно, но здорово!!!Использование паттерна Momento в подобном контексте я нигде не видел.Какие механизмы, какие API, какие обратные процедуры?Если они тождественны, то зачем нужны эти усложнения?С нетерпением жду продолжения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2007, 18:39 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
SeVamcureenab, непонятно, но здорово!!!Использование паттерна Momento в подобном контексте я нигде не видел.Какие механизмы, какие API, какие обратные процедуры?Если они тождественны, то зачем нужны эти усложнения?С нетерпением жду продолжения. Не Momento, Memento, от memory (или наоборот). Механизмы системы проектирования. Тот же самый MS Visio в UML моделях позволяет тэгировать атрибуты класса приложения (класс Originator в паттерне Memento) признаком persistent, так что генератору схемы БД ясно, какие таблицы и поля (класс Memento в одноимённом паттерне) нужно унаследовать из диаграммы статической структуры и нет надобности моделировать БД руками. API для доступа к БД, который обеспечивает постоянство (persistence) объекта, т.е. сохранение состояния объекта в БД в процессе сброса кэш и восстановление этого состояния из БД в кэше в процессе разъименовывания объектной ссылки. Усложнения возникают, когда мы проектируем БД и классы приложения руками. Современный подход позволяет думать о постоянстве объекта приложения не вникая в механизмы, которые это постоянство обеспечивают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2007, 19:29 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Ну, ты уж совсем буквоед."Банда четырех" -настольная книга.Палец не там застрял. Сразу становится неинтересно.На мой взгляд, трудности возникают, как раз при таких методах проектирования.Уж слишком много в них ограничений, а когда на запросы посмотришь, совсем дурно становиться.Флейм на эту тему поднимать не будем, это моя точка зрения и я ее никому не навязываю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2007, 22:23 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Область молодая, потому косяков вней встречается изрядное количество, сособенно при попытках скрестить бульдога с носорогом. Чтобы от запросов не было дурно, СУБД должна поддерживать объектное расширение SQL. Проектировать классы нужно с учётом возможностей платформы. И т.д. и т.п. Скажем так, от повсеместного применения этого подхода в коммерческих приложениях БД я пока воздержусь. Для разработки экранных форм объектные навороты явно лишние (кроме тех объектов-компонентов, что встроены в среду разработки/выполнения). В приложениях со сложной пакетной обработкой данных они могут быть полезными, хотя бы для правильного кэширования данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2007, 23:08 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
mcureenabУсложнения возникают, когда мы проектируем БД и классы приложения руками. Это смотря с чьей точки зрения "усложнения". С т.з. низкоквалифицированного ООП кодера отдельное проектирование базы - безусловно "усложнение", он в этом все равно ничего не понимает. С т.з. нормального архитектора - база и "классы приложения" могут и должны рассматриваться отдельно хотя бы потому, что с базой зачастую работает не одно приложение mcureenabСовременный подход позволяет думать о постоянстве объекта приложения не вникая в механизмы, которые это постоянство обеспечивают. опоздали вы с "современным подходом" Мода на MDA уже прошла. Сейчас SOA модно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2007, 13:40 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Alexey KudinovМода на MDA уже прошла. Сейчас SOA модно. MDA и SOA НЕ являются взаимозаменяющими подходами, скорее они могут дополнять друг друга. SOA - взаимодействие. MDA - разработка приложений, управляемых моделью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2007, 14:23 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Роман ДынникSOA - взаимодействие. MDA - разработка приложений, управляемых моделью. И да и нет. В случае MDA разработка идет "от модели", в случае SOA [в значительной части] "от сервисов". Т.е. SOA - это взаимодействие конечно, но взаимодействие весьма значительно влияющее на архитектуру приложения. Я их сравнивал в плане новизны тенденций в проектировании. Не в плане взаимозаменяемости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2007, 14:36 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Alexey KudinovС т.з. нормального архитектора - база и "классы приложения" могут и должны рассматриваться отдельно хотя бы потому, что с базой зачастую работает не одно приложение Полагаю, тут речь идёт о разделении класса спецификации и класса реализации. Чтобы объект оставался целостным его методы должны работать одинаково независимо от места развёртывания этого объекта. В идеальном случае класс реализуется только в одном компоненте системы, поэтому работает одинаково во всех её приложениях. Усложнять классы постоянных объектов нет смысла. Как правило такие классы моделируют сущности, а сущности по определению не имеют поведения. Поведение определяют классы-агенты, которые реализуют бизнес-правила и службы системы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2007, 15:00 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Alexey Kudinov Роман ДынникSOA - взаимодействие. MDA - разработка приложений, управляемых моделью. И да и нет. В случае MDA разработка идет "от модели", в случае SOA [в значительной части] "от сервисов". Т.е. SOA - это взаимодействие конечно, но взаимодействие весьма значительно влияющее на архитектуру приложения. Так SOA, это и есть архитектура, точнее принцип построения. Только SOA это архитектура самой системы, а MDA архитектура разработки системы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2007, 15:14 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
SOA - архитектура взаимодействия, MDA - чистое проектирование предметной области и создание приложения по модели. Так или иначе, опираясь или не опираясь на SOA, нужна модель предметной области, для управления которой по большому счету и существует MDA. С сообщениями/контрактами SOA напрямую (по-хорошему) приложения не должны работать. Бизнес-логика работает с объектами предметной области, объекты предметной области передаются слою ServiceAgents, которые обращаются к соответствующим сервисами, транслируя объекты в сообщения, DataContract... Т.о. если разработка идет от сервисов, все равно необходим двусторонний маппинг сообщений сервисов на объекты предметной области. Работать напрямую с сервисами, это все равно что использовать запись recordset-а в качестве бизнес-объекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2007, 15:14 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
mcureenabТолько SOA это архитектура самой системы, а MDA архитектура разработки системы. Это уже более реальное утверждение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2007, 15:19 |
|
||
|
Как выбрать из базы коллекцию объектов?
|
|||
|---|---|---|---|
|
#18+
Ребята, с удовольствием читаю данный топик!!! Много модных и умных слов, но за частоколом терминологии не понятно, что скрывается.То Originator тождественен Memento, то в БД живут объекты, то разработка ведется от сервисов и тд. Перечитываю по три раза,ничего не понимаю, еще читаю, но эффект тот же. Продолжайте в том же духе. С интересом буду наблюдать продолжение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 11:36 |
|
||
|
|

start [/forum/topic.php?all=1&fid=32&tid=1544757]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
149ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
101ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 490ms |

| 0 / 0 |
