powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как выбрать из базы коллекцию объектов?
90 сообщений из 90, показаны все 4 страниц
Как выбрать из базы коллекцию объектов?
    #34270770
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемые спецы!
Подскажите, как люди выбирают из базы коллекцию объектов, если объект содержит другие объекты? Вот например, объект класса Документ, содержит в себе коллекцию объектов класса СтрокаДокумента. В базу я их замапплю в две таблицы Documents и DocumentRows, связь между ними один ко многим. А вот теперь я хочу выбрать на клиента коллекцию объектов Документ. Как мне такое проделать?
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34270947
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Атас какой.

С чем это ты работаешь?
"замаплю", "объекты", "коллекции"

Это ты бросай. Тут тебе за объектный подход башку живо открутят и заставят
Кодда читать.


(Таблички, связи, PK/FK - это понятно)


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34270957
Jedaito
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подсказка
В базе не хранятся объекты
В базе хранятся их данные
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34270963
anjey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
уважаемый Fuzzy, не слышали ли про такую технологию в Java как Hibernate ?
Очень советую поглядеть на принцип её устройства ;)
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34271339
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Парни, ну чего накинулись? Я задал простой вопрос, хотел бы получить простой ответ.
Вам что, никогда не нужно было вытянуть из базы коллекцию объектов, данные которых хранились бы в нескольких таблицах, как я выше описал?
Про гибернейт конечно слышал, но меня интересуют технические подробности -- какие именно селекты выполняются? Может, кто ссылкой поможет?
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34271819
aag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВам что, никогда не нужно было вытянуть из базы коллекцию объектов, данные которых хранились бы в нескольких таблицах, как я выше описал?
Можете себе представить - никогда. Данные вытягиваю ежедневно, а вот "коллекции обьектов" - нет.
авторкакие именно селекты выполняются?
Те, которые напишешь.

Nobody faults but mine... (LZ)
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34271963
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FuzzyПарни, ну чего накинулись? Я задал простой вопрос, хотел бы получить простой ответ.
Вам что, никогда не нужно было вытянуть из базы коллекцию объектов, данные которых хранились бы в нескольких таблицах, как я выше описал?
Про гибернейт конечно слышал, но меня интересуют технические подробности -- какие именно селекты выполняются? Может, кто ссылкой поможет?

Решение зависит от СУБД. Оракл поддерживает хранение и извлечение объекта с вложенной коллекцией одним запросом.

Код: plaintext
select value(o) from obj_table o;
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34271978
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё раз, прочитайте мой вопрос внимательно -- прошу поделиться опытом тех, кто когда-нибудь сталкивался с необходимостью выбрать из базы коллекцию объектов, и, не пользуясь гибернейтом или чем-то подобным, сам писал для этого селекты.
Тех же, кто этого никогда не делал, а также тех, кто не понимает, зачем это нужно, а также тех, кто вообще ничего не знает и не понимает, прошу тему не засорять.
(Может, я не том разделе пишу? Уважаемые модераторы, прошу перекинуть тему туда, где на неё могут ответить конструктивно! Спасибо!)
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34271984
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenab, спасибо за ответ!
А если база не поддерживает такой прикол, то как тогда?
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34272012
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JedaitoПодсказка
В базе не хранятся объекты
В базе хранятся их данные

Данные, это абстракция. Для хранения данных, их нужно определённым образом организовать. Объект - область памяти и методы работы с ней. В реляционной БД объекты - записи в таблицах, методы - API для работы с курсорами и SQL запросы.

Сохранение состояния объета в БД означет копирование значений части атрибутов этого объекта в другой объект, который сохраняется в БД.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34272067
Jedaito
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Fuzzyвыбрать из базы коллекцию объектов, и, не пользуясь гибернейтом или чем-то подобным,
Fuzzyобъект класса Документ, содержит в себе коллекцию объектов класса СтрокаДокумента. В базу я их замапплю в две таблицы Documents и DocumentRows, связь между ними один ко многим

Каждый объект Document должен уметь сам загрузить свои DocumentRows (т.е. выполнить select * from DocumentRows where DocumentID=@id, обойти в цикле результат, по каждой записи создать DocumentRow и поместить в свой список)
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34272082
Jedaito
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mcureenabСохранение состояния объета в БД означет копирование значений части атрибутов этого объекта в другой объект, который сохраняется в БД.

Это её личное дело, что она у себя создаёт. От пользователя она должна принять, и пользователю вернуть, состояние объекта в определённый момент времени.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34272094
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FuzzyА если база не поддерживает такой прикол, то как тогда?

Положим есть тип.

Код: plaintext
1.
2.
3.
t_obj (
 a number, -- скалярный атрибут
 b table of number -- неупорядоченная коллекция чисел с неограниченным размером
)

Преобразуем объектное представление данных в реляционное.
Получаем две таблицы:

Код: plaintext
1.
2.
obj(oid number primary key, a number)

obj_b(owner references obj, val number)

Где oid - системный идентификатор объекта, owner - ключ для связи коллекции и её владельца.

Чтобы реконструировать из БД объект придётся написать два запроса.

Код: plaintext
1.
2.
3.
4.
o t_obj; -- объявление реконструируемого объекта

select a into o.a from obj where oid=:x;

select val bulk collect into o.b from obj_b where owner=:x;

into - это ключевое слово PL/SQL означает, что запрос выполняется и возвращает строку в указанную переменную (тут o.a или o.b).
bulk collect - означает, что в o.b будут выбраны все записи, возвращаемые запросом. Если и этого "прикола" нет в той или иной форме, придётся для выборки записей в коллекцию использовать цикл явно.

ОРСУБД Оракл работает примерно так же, только скрывает эти тонкости от пользователя. С Hibernate не работал, но полагаю, что и он работает примерно так же.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34272115
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mv...
Тут тебе за объектный подход башку живо открутят и заставят
Кодда читать.


Форум называется "Проектирвание БД", и не ограничивается только реляционными БД.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34272501
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jedaito, mcureenab, спасибо за ответы!

Однако, они касаются восстановления из базы ОДНОГО объекта, содержащего коллекцию подчинённых объектов. Я согласен, для одного объекта способ нормальный: выполнил селект с фильтром для главного объекта, создал главный объект, затем выполнил второй селект с фильтром по главному объекту для подчинённых объектов, пробежался по нему циклом и создал коллекцию подчинённых объектов (для ясности -- коню понятно, что заниматься этим должен уметь сам главный объект).

Но вопрос-то был о том, что мне нужно получить коллекцию "ГЛАВНЫХ" объектов, т.е. каждый из которых содержит ещё по коллекции подчинённых объектов, а может, и не по одной! Легко представить, во что выльется для бедного SQL-сервака такое дело -- по запросу для каждой подчинённой коллекции, верно? Т.е. куча мелких запросов, на которых он и ляжет.

Как это победить, я примерно представляю, но не хотелось бы велосипед изобретать
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34272550
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рекомендую посмотреть библиотеку CSLA (www.lhotka.net).В довесок к ней есть прекрасная книга.
Меня она устраивает гораздо больше, чам Hibernate и иже с ними.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34272594
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa, спасибо за ответ, но мне не нужна сейчас сторонняя библиотека. Я предпочитаю сам всё написать для своих объектов -- мне виднее, как их надо правильно мапить в базу, а чего там библиотека делает, Бог её знает.
Заходил на их сайт, но не нашёл, где там описывается поведение этой либы в моём примере, может, дадите более конкретную ссылку?
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273031
Jedaito
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FuzzyНо вопрос-то был о том, что мне нужно получить коллекцию "ГЛАВНЫХ" объектов
Свести задачу к предыдущей. Сделать объект, например, Журнал документов.

FuzzyЛегко представить, во что выльется для бедного SQL-сервака такое дело -- по запросу для каждой подчинённой коллекции, верно? Т.е. куча мелких запросов, на которых он и ляжет.
Много маленьких запросов из параллельных потоков может оказаться даже наоборот быстрее.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273182
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jedaito, откуда мнение, что много мелких запросов быстрее, чем один большой? Я раньше думал, что очень наоборот. Серверу же нужно время, чтобы запрос 1) получить по сетке, 2) распарсить, 3) построить план выполнения, 4) запустить и т.д. и т.п. Если запрос один, то всё это нужно сделать один раз. А если их тысячи, то соответственно.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273305
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FuzzyJedaito, откуда мнение, что много мелких запросов быстрее, чем один большой? Я раньше думал, что очень наоборот. Серверу же нужно время, чтобы запрос 1) получить по сетке, 2) распарсить, 3) построить план выполнения, 4) запустить и т.д. и т.п. Если запрос один, то всё это нужно сделать один раз. А если их тысячи, то соответственно.

1. Много маленьких запросов можно поместить в хранимую процедуру и выполнять их на стороне сервера, так что 1,2,3 делать каждый раз не придётся. Кроме того, запрос иногда можно выполнить сразу для массива id объектов, так что накладные расходы значительно сократятся.

2. Что мешает в одном запросе выбрать записи сразу для множества главных объектов, а на стороне клиента рассортировать их по своим коллекциям?

3. Коллекции коллекций это слишком сложно. Используй декомпозицию и ссылки. Пусть объект содержит коллекцию ССЫЛОК на объекты, которые в свою очередь содержат коллекции. Оракл, например, подерживает сети объектов и умеет выбирать объекты по ссылкам ещё до того, как они понадобятся в программе. На клиенте, если потребуется, эту модель можно преобразовать в более подходящую.

4. Не изобретай велосипед. Если тебе что то непонятно, это не значит, что это плохо или не то. Гораздо проще понять существующее отлаженное решение, чем придумать и реализовать без ошибок своё, тем более, что знаний в этой области у тебя ещё маловато.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273325
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273353
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenab
1. Много маленьких запросов можно поместить в хранимую процедуру и выполнять их на стороне сервера, так что 1,2,3 делать каждый раз не придётся. Кроме того, запрос иногда можно выполнить сразу для массива id объектов, так что накладные расходы значительно сократятся.
Не понял, как это сделать практически?

mcureenab
2. Что мешает в одном запросе выбрать записи сразу для множества главных объектов, а на стороне клиента рассортировать их по своим коллекциям?
Так и собираюсь сделать, если не найдётся способ лучше

mcureenab
3. Коллекции коллекций это слишком сложно. Используй декомпозицию и ссылки. Пусть объект содержит коллекцию ССЫЛОК на объекты, которые в свою очередь содержат коллекции.
Ясное дело, что только так и надо. Но всё равно придётся по крайней мере один раз создать подчинённые объекты, вытянув данные из базы. Вопрос, как это сделать с минимальными затратами.

mcureenabОракл, например, подерживает сети объектов и умеет выбирать объекты по ссылкам ещё до того, как они понадобятся в программе. На клиенте, если потребуется, эту модель можно преобразовать в более подходящую.
Я не собираюсь работать с Ораклом, к сожалению. Да и не хочу привязываться к какой-то определённой базе. Хочется универсального решения, шаблонного.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273358
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fuzzy mcureenab
1. Много маленьких запросов можно поместить в хранимую процедуру и выполнять их на стороне сервера, так что 1,2,3 делать каждый раз не придётся. Кроме того, запрос иногда можно выполнить сразу для массива id объектов, так что накладные расходы значительно сократятся.
Не понял, как это сделать практически?


Смотри конкретный API доступа к БД и СУБД.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273359
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa, ну и какие селекты для этого будет мутить эта либа? Можно уточнить?
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273361
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenab Fuzzy mcureenab
1. Много маленьких запросов можно поместить в хранимую процедуру и выполнять их на стороне сервера, так что 1,2,3 делать каждый раз не придётся. Кроме того, запрос иногда можно выполнить сразу для массива id объектов, так что накладные расходы значительно сократятся.
Не понял, как это сделать практически?


Смотри конкретный API доступа к БД и СУБД.

А в общем случае? Вот нужно мне вытянуть 150 главных объектов. Что мне в хранимку передать? И что она мне вернёт?
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273364
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мутить будешь сам-две процедуры, которые я написал.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273369
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa, ещё раз:)
Я спросил не про то, что я буду делать, а про то, какие селекты будет сервер выполнять, для этой операции.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273371
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Процедуры могут быть разные и с любыми параметрами для кажого конкретного случая.Никто не мешает написать и одну общую процедуру, все на усмотрении разработчика.На общие вопросы могут быть только общие ответы.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273382
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм, мне казалось, пример вполне конкретный. Ну да ладно. Спасибо за помощь, SeVa!
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273387
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FuzzyЯ не собираюсь работать с Ораклом, к сожалению. Да и не хочу привязываться к какой-то определённой базе. Хочется универсального решения, шаблонного.

Чем тебе не шаблонное решение?

Код: plaintext
select value(o) from obj_table o;

Объектный SQL скоро будет реализован во всех коммерческих СУБД, и твоё шаблонное решение уйдёт в небытие, как худше из всех возможных, поскольку в общем случае API БД никакой оптимизации в твоей задаче не допускает но тебе придётся ориентироваться на него.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273394
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabОбъектный SQL скоро будет реализован во всех коммерческих СУБД, и твоё шаблонное решение уйдёт в небытие, как худше из всех возможных
"... а при коммунизме всё будет зае*ись, он наступит скоро, надо только подождать..." (с)ГрОб
:))

А щас всё-таки надо работать с API БД как есть.
Так что насчёт хранимок, как ими воспользоваться для решения моей задачи?
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273411
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PS. Осталось только угадать твою структуру и выслать тебе готовое решение.Возможный вариант я дал.Рекомендую еще зайти на тамошний форум, дабы посмотреть, как народ общается в подобных местах.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273417
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FuzzyА щас всё-таки надо работать с API БД как есть.

А какой есть?

FuzzyТак что насчёт хранимок, как ими воспользоваться для решения моей задачи?

Откуда мне знать? Может твоя БД хранимые процедуры не поддерживат?

А вообще, с ХП всё точно так же, только SQL запросы храняться на стороне сервера. ХП возвращает массивы записей, которые нужно рассортировать по прикладным объектам.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273423
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa, ну причём тут готовое решение? Хочется просто понять, сколько и каких СЕЛЕКТОВ будет выполнять сервер для того, чтобы выбрать на клиента коллекцию объектов, каждый из которых сам содержит коллекцию объектов.
Какие бы ни были там процедуры, SQL сервер всё равно ведь будет выполнять именно запросы.
И не получится ли, что запросов будет 1 плюс ещё по запросу на каждый "главный" объект для выборки соответствующих подчинённых?
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273435
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenab FuzzyТак что насчёт хранимок, как ими воспользоваться для решения моей задачи?
Откуда мне знать? Может твоя БД хранимые процедуры не поддерживат?

А вообще, с ХП всё точно так же, только SQL запросы храняться на стороне сервера. ХП возвращает массивы записей, которые нужно рассортировать по прикладным объектам.

Я понял.
Короче говоря, выходит, что нормальный способ будет такой:
1. Зарядить запрос по таблице с главными объектами с нужным фильтром.
2. Зарядить запрос по таблице с подчинёнными объектами, как фильтр использовать запрос с главными объектами.
3. Мчаться циклом по резалтсету главных объектов, для каждой записи:
а) создаём новый главный объект
б) мчимся циклом по резалтсету подчинённых объектов с текущей позиции, пока ключ бьёт с соответствующим главным объектом, создаём новые подчинённые объекты, пихаем в коллекцию.

Типа как-то так, видимо?
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273439
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FuzzySeVa, ну причём тут готовое решение? Хочется просто понять, сколько и каких СЕЛЕКТОВ будет выполнять сервер для того, чтобы выбрать на клиента коллекцию объектов, каждый из которых сам содержит коллекцию объектов.
Какие бы ни были там процедуры, SQL сервер всё равно ведь будет выполнять именно запросы.
И не получится ли, что запросов будет 1 плюс ещё по запросу на каждый "главный" объект для выборки соответствующих подчинённых?

В лучшем случае для множества объектов с одной вложеной коллекцией нужно выполнить 2 запроса. Один за множеством главных объектов, второй за вложенными коллекциями. В худшем 2x<количество выбираемых объектов>, хуже только по дури можно сделать. Фактическое количество запросов в данном случае зависит от возможностей API СУБД и твоего таланта.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273461
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fuzzy...
3. Мчаться циклом по резалтсету главных объектов, для каждой записи:
а) создаём новый главный объект
б) мчимся циклом по резалтсету подчинённых объектов с текущей позиции, пока ключ бьёт с соответствующим главным объектом, создаём новые подчинённые объекты, пихаем в коллекцию.

Типа как-то так, видимо?

Типа того.

Пара замечаний.
1. В запрос подчинённых коллекций нет нужды тащить таблицу с главными объектами, если тебе известны их id, а они тебе известны, поскольку ты их выбрал первым запросом. Но в конкретном случае это может быть не важно. Если уж плясать в этом направлении, то можно одним запросом выбрать данные из таблиц с главными и подчинёнными объектами, правда размер выборки в байтах может ощутимо возрасти.
2. Твои циклы подразумевают, что строки в запросах будут предварительно отсортированы по id объекта. Это лишняя трата времени, не проще, но эффективенее сразу создать все главные объекты, а затем рассортировать по ним подчинённые записи, используя, например, хэш таблицу.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273491
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не совсем так, mcureenab, в запрос по подчинённым объектам я собираюсь передавать отнюдь не таблицу, а запрос по главным объектам. И по двум рекордсетам я буду бежать одновременно, и фетчить их тоже одновременно. Поэтому без сортировки по id не обойтись, конечно.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273496
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FuzzyНе совсем так, mcureenab, в запрос по подчинённым объектам я собираюсь передавать отнюдь не таблицу, а запрос по главным объектам. И по двум рекордсетам я буду бежать одновременно, и фетчить их тоже одновременно. Поэтому без сортировки по id не обойтись, конечно.

Дело твоё. Так тоже можно. Не факт, что будет производительнее, но определённо проще.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273498
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все зависит от задачи.
У меня используется только выборка списка с отложенным чтением деталировки.Например, строиться только список товарно-материальных ценностей, упаковки подгружаются, если пользователь раскрывает вложенный грид(Баловать их не стоит.Пусть выбирает только то, что ему нужно.).
Код:

public PackageList Packages
{
get
{
CanReadProperty("_packages", true);
if (_packages == null)
_packages = PackageList.GetPackageList(_inventoryItemUid);//вызов проц и построение списка упаковок по Uid ТМЦ
return _packages;

}
}

Если нужно все сразу, народ изгаляется как может.Варианты обсуждаются в форуме.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273500
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отлично, значит, пока имеем два способа:
1) "Идиотский": 1 запрос по главным объектам, и по запросу для каждого главного объекта по подчинённым объектам.
2) "По запросу на коллекцию": 1 запрос по главным объектам, и 1 запрос по подчинённым объектам, бежим по ним одновременно.
Ну можно ещё предложить
3) "Денормализованный": 1 общий запрос по главным и подчинённым объектам. Подойдёт в крайнем случае, если подчинённых коллекций одна. Если больше, то это будет смерть.

Ещё есть варианты? А как Hibernate делает, кто знает?
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273506
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa, ты описал "идиотский" способ по моей классификации :)
Не всегда можно отложить загрузку подчинённых объектов, иногда хочется всё и сразу.
А на каком форуме народ изгаляется на эту тему, подскажи?
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273529
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хех. Я тут видал, программа за КАЖДЫМ атрибутом в БД обращалась. Обоснование было - канал медленный, и если нужен только конкретный атрибут, то тянуть весь объект будет накладно. Я сомневаюсь, но, полагаю, автор знал о чём говорит.

Сам делал объектный кэш на PL/SQL. Методы и SQL запросы генерились по шаблону автоматически для каждого класса объектов. Чтобы не усложнять шаблон и оставаться в его рамках, атрибуты объектов тянул только по id. Если требовался запрос не по id, то сначала выбирал список id, а потом типовыми методами подружал сами объекты по одному. Благо таких необъектных запросов было совсем чуть и претензий на всеобщность тоже не было.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273539
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скучно.Первый раз слышу, что при отложенной выборке одновременно "бегут" и по подчиненным объектам.Я четко оговорился, что все зависит от задачи.Мой вариант, как раз для пользователей идиотов, которым вряд ли нужна деталировка для массы записей, ВЫБОРКА ПРОИСХОДИТ ТОЛЬКО ПО ЗАПРОСУ.При необходимости я сделаю все в одной процедуре.Если тебе нужно насиловать бд и загромождать экран-флаг в руки.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273546
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa, а я предпочитаю иметь на клиенте полноценный объект, а не полузагруженный. И вообще, мало ли какие бывают расклады. Может, юзер желает в гриде видеть кроме главного объекта ещё и какие-то данные по подчинённым объектам, какое-нибудь текстовое значение через запятую, например. Или агрегат какой-нибудь хитрый. Что тогда? Переходим от объектов к рекордсетам?
А масса записей на клиенте по определению не нужна, нужно ровно столько, сколько юзер может просмотреть, и не так уж это много, можно и с деталями дёрнуть с сервака. Хотя, конечно, "случаи разные бывают", и это уже флейм, ПМСМ.
Так что насчёт форума, где ещё народ эту тему обсуждает?
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273555
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если ..., а если ..., а если пользователь пива захочет. За твоей фантазией трудно угнаться.На словоблудие может быть много ответов.Задай вопрос в форуме "Просто треп" (есть такой здесь).
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273563
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пользователь -- это бог. Захочет пива -- придётся бежать, ведь мы же работаем за деньги :))

SeVa, ты упоминал форум, где народ обсуждает похожую тему. Это был "Просто трёп"?
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273582
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FuzzySeVa, а я предпочитаю иметь на клиенте полноценный объект, а не полузагруженный.

Нуууу... Есть ещё ленивая инициализация и многие её успешно используют. Иногда запросу может пойти на пользу, ибо пользователь быстро получит первые записи, а не будет ждать, когда пол БД на клиента подгрузится. Опять же ускорение, если большая часть объектов не будет использована.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273588
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenab, не вижу проблемы -- открыл два или сколько надо запросов, собрал объект, показал клиенту, он его сразу видит. Переходим к следующему объекту. Никто ничего не ждёт.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273603
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fuzzymcureenab, не вижу проблемы -- открыл два или сколько надо запросов, собрал объект, показал клиенту, он его сразу видит. Переходим к следующему объекту. Никто ничего не ждёт.

Тебе виднее, конечно. Только на открытие запроса с сортировкой время нужно. Если коллекции большие а критерий отбора слабый, пользователю долго ждать придётся.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273608
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenab, ты прав, прибавляется время на выполнение отсортированного запроса по подчинённым объектам. Конечно, загрузка с отсроченной детализацией быстрее первую запись покажет, это пожалуй верно.
А что будет, если юзер начнёт по строкам грида щёлкать -- тут уж лучше сразу на клиенте всё иметь, чем для каждого щелчка запрос выполнять. А?
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273618
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FuzzyА что будет, если юзер начнёт по строкам грида щёлкать -- тут уж лучше сразу на клиенте всё иметь, чем для каждого щелчка запрос выполнять. А?

Конечно лучше. Только если пользователь дождётся, когда ему в гриде пощёлкать разрешат.

Лучше (в разумных пределах) увеличить время ожидания реакции на один клик (пользователь и не заметит, что программа дёрнула БД), и быстро выполнить основной запрос, чем регулярно зависать на выполнении всего запроса.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273625
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот тут не соглашусь -- мне кажется, лучше юзеру подождать, когда сделается рефреш, а потом просматривать грид без тормозов, чем раздражаться, когда детали с задержкой показываются.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273666
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FuzzyВот тут не соглашусь -- мне кажется, лучше юзеру подождать, когда сделается рефреш, а потом просматривать грид без тормозов, чем раздражаться, когда детали с задержкой показываются.

Сделай так, чтобы детали без задержки отображались иначе и твой мегазапрос будет работать очень долго. Задержку в 0.5 сек на клик пользователь не заметит. Задержка в 5 сек на все 10 записей будет слегка раздражать. На задержку 50 сек пользователь скажет, что программа не работает.
Хотя выход и тут есть. Запусти фоновую нить, которая, пока пользователь втыкает на результат запроса, доберёт из БД детали.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273856
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скажем, на mssql можно было бы выполнить один запрос for xml explicit и получить в xml обьекты с вложенными коллекциями, а на клиенте только распарсить полученный xml.
Не факт, что будет быстрее - но наверняка будет прозрачнее и универсальнее.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34273901
Фотография smeh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня сделано так, в гриде лежат те поля по которым чаще всего пользователь ищет запись, и только они и загружаются из базы. При выборе записи все остальное подгружается - вполне быстро работает. Если появляются поля, которые тоже нужны в гриде - они туда добавляются.
А поиск записи путем открытия каждой - это неправильный метод и если пользователь так делает - пусть ждет.
ИМХО.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34274394
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В варианте, который я описал, в 99,99999% пользователю информация о деталировке не нужна.Это дополнительная опция.Если не доходить до маразма,как в случае с загрузкой по одному полю(интересно узнать какой размер пакетов у них использовался для передачи!), то в большинстве случаев пользователь не заметит отдельной загрузки.
Кроме допустимого времени реакции, существует еще такое понятие, как надежность системы.
Для всех любителей абстрактных рассуждений вопрос.
Что может произойти в блокировочнике, если одновременно выполняются два запроса:
первый на выборку,второй на апдейт по полю с некластерным индексом?
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34276562
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И тишина........Как быстро страсти улеглись.Ответ простой-мертвая блокировка.Думаю, когда выше ее вероятность любители показывать все и сразу сообразят сами.Заказчика больше устроит неторопливая система, чем не работающая совсем.
Одно дело, когда Access применяется для работы с зоопарком из нескольких разнородных источников данных, и совсем другое, при работе нескольких сотен пользователей одновременно.
Другой аспект-это разработка и дальнейшее применение объектов.Какой вариант вы выбирите, если их тоже будет несколько сотен:генерация в несколько кликов простых объектов с последующей их композицией или ручное конструирование монстров с вылизыванием микросекунд?
Объект должен содержать и выполнять только то для чего он предназначен.
В шаблононе MVP, который мы применяем,рекомендуется использовать раздельные объекты, что
позволяет конструировать интерфейс из готовых блоков, выделить отдельно логику бизнес процессов, автоматизировать тестирование и прочие. Пример. Компании, отделы, физ.лица имеют много общих сущностей-адреса, контакты, телекомы, комментарии и тд.В каких случаях нужна вся эта информация сразу?
Посмотрите msdn в разделе патерны.Какие там рекомендации на основе решений, которые применяются не один год.
Оптимизация нужна только в очень крайних случаях.Если будут провалены сроки никого не будет интересовать маленький кусок, где все оптимизировано до блеска.
PS. В Axapte еще более "идиотский" способ-открытие курсора с чтением по одной записи.Вариант не очень идеальный, но это работает.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34276613
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa, ты сейчас с кем разговариваешь? :)
В теме был поднят вопрос, как алгоритмически выбрать из базы коллекцию объектов, каждый из которых в свою очередь содержит ("ссылается на") коллекцию объектов.
А зачем это вообще нужно, и можно ли так делать -- это уже другой вопрос.

К сожалению, ничего нового я для себя из темы не узнал, что кажется мне очень странным. Неужели никто не может прояснить работу того же гибернейта в таких случаях?
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34276693
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильно поставленый вопрос и отсутствие каши в голове- половина успеха.Тебе здесь не раз объясняли, что в БД объекты не хранятся.ORM предназначен специально для того, чтобы не составлять вручную запросы.Объснять тебе как работает Hibernate - пустое занятие.За сим все.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34276731
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaПравильно поставленый вопрос и отсутствие каши в голове- половина успеха.Тебе здесь не раз объясняли, что в БД объекты не хранятся.ORM предназначен специально для того, чтобы не составлять вручную запросы.Объснять тебе как работает Hibernate - пустое занятие.За сим все.

Объясни другим. Я делал ORM для решения определённой задачи и меня интересуют другие решения.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34277005
Oleg Martynenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Fuzzy

Напрасно не слушаешь людей, которые дают тебе хорошие советы. SeVa не зря говорил тебе про CSLA. Книга, которая описывает эту библиотеку, содержит помимо прочего очень неплохой материал по проектированию бизнес объектов (приложения вцелом). И хотя и не даст тебе готовый ответ на твой вопрос, но поможет тебе избежать таких вопросов в будущем ("Лучше полчаса потерять, зато, потом за 5 мин. долететь.").

А пытаться заменить нехватку общих навыков проектирования/программирования (и, насколько я могу судить, незнание принципов работы с БД) такими вопросами (да ещё потом говорить, что ничего нового не узнал из ответов) пустая трата времени (причем, не твоего).
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34277190
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa, Oleg Martynenko -- я с вас тащусь просто. Вы нереально крутые. Вы напоминаете мне мастера кун-фу, который на вопрос ученика "как мне освободиться от такого-то захвата" отвечает "главное -- гармония" :))
Не обижайтесь насчёт "ничего нового" -- просто о том, что если есть возможность чего-то не делать, то лучше этого не делать, я знаю и сам. Спасибо за то, что напомнили мне об этом. Вопрос был о другом.

Да, ещё -- я НЕ БУДУ ничего покупать. Тем более книг, которые не дают мне ответа на вопрос. Поэтому хватит рекламы, у меня ощущения, что вы этим на жизнь зарабатываете. Прошу вас в эту тему больше не писать. Спасибо.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34277801
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FuzzyДа, ещё -- я НЕ БУДУ ничего покупать. Тем более книг, которые не дают мне ответа на вопрос.
А зря..., прочитайте хотябы Фаулера "Архитектура корпоративных программных приложений".

FuzzyПоэтому хватит рекламы, у меня ощущения, что вы этим на жизнь зарабатываете. Прошу вас в эту тему больше не писать. Спасибо
Вот она благодарность за хорошие советы... :)
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34277909
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34277988
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Роман Дынник
но, имхо, это трудоемко и создает множества проблем в "гибком проектировании".

А почему, кстати? Обоснуйте плз.
Имхо это может быть не очень производительно - но уж никак не трудоемко, послал 1 запрос,
получил ответ, скормил парсеру. Запросы for xml, если рука набита, шлепаются как блины, тоже ничего трудоемкого тут нет.
И в чем проблемы гибкости? Уж xml-то все умеют формировать, если закладываться на xml - скажем, введение сервера приложения пройдет вообще незаметно с точки зрения клиента.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34278061
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Роман Дынник 2 Fuzzy
Отвечая на вопрос, кратко опишу один из вариантов.
...поскипано...
Хочется без Lazy Load - получаем весь граф объекта в виде xml с помощью for xml запроса и десериализуем в объект
...поскипано...
Спасибо за Ваш ответ, да ещё и со ссылкой на первоисточник. Но вопрос звучал так: а шо ж мне делать, ежели мой сервак не возвращает for xml запрос? Другого способа что, не существует? Без xml запроса, который не является пока что стандартом, если мне не изменяет склероз?
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34278085
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот МатроскинА почему, кстати? Обоснуйте плз.
Имхо это может быть не очень производительно - но уж никак не трудоемко, послал 1 запрос,
получил ответ, скормил парсеру. Запросы for xml, если рука набита, шлепаются как блины, тоже ничего трудоемкого тут нет.
И в чем проблемы гибкости? Уж xml-то все умеют формировать, если закладываться на xml - скажем, введение сервера приложения пройдет вообще незаметно с точки зрения клиента.

Запросы for xml шлепаются как блины только for xml auto. Для десериализации xml в объект чаще требуется for xml explicit или собственная десериализация на стороне клиента, а это уже не как блины (что собственная сериализация, что for xml explicit). Потом, модель от цикла к циклу разработки имеет свойтво меняться - расширяться, дополняться... что неизбежно вызовет переделку либо сериализации, либо for xml explicit для измененных сущностей, в отличии от простых sp-CRUD, которые намного легче автоматом генерится по модели.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34278136
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FuzzyСпасибо за Ваш ответ, да ещё и со ссылкой на первоисточник. Но вопрос звучал так: а шо ж мне делать, ежели мой сервак не возвращает for xml запрос? Другого способа что, не существует? Без xml запроса, который не является пока что стандартом, если мне не изменяет склероз?

В таком случае, решение может быть таким:
Возвращайте несколько выборок (select-ов) из хп, заполняйте таблицы DataSet-а на основе этих выборок, связывайте эти DataTable relation-ми. Далее смотрите сами - использование DataSet/типизированного DataSet как бизнес-объекта, либо DataSet.GetXml() и десериализация в бизнес-объекты.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34278912
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за ответ, Роман Дынник, правда, я с сишарпом не очень-то знаком. Мне бы лучше примеры на java.
Но, тем не менее, правильно ли я понял:
1. Вытягиваем запросом записи для главных объектов в таблицу на клиенте.
2. Вытягиваем запросом записи для подчинённых объектов в таблицу на клиенте.
3. На клиенте мутим уже десериализацию из этих двух таблиц в коллекцию объектов, при помощи преобразования в xml с последующим парсингом.
Так?
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34279026
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FuzzyНо, тем не менее, правильно ли я понял:
1. Вытягиваем запросом записи для главных объектов в таблицу на клиенте.
2. Вытягиваем запросом записи для подчинённых объектов в таблицу на клиенте.
3. На клиенте мутим уже десериализацию из этих двух таблиц в коллекцию объектов, при помощи преобразования в xml с последующим парсингом.
Так?
Исходя из ваших условий, примерно так. Я проецировал ситуацию для .net-а.
Исходя из используемых технологий можно найти другие, более оптимальные решения.
Например, в oracle - можно xml-запросы выполнять, если брать oracle+java - можно java stored procedure использовать и J-SQL и на стороне БД-сервера POJO-объект создавать и возвращать.
Какие средства и технологии вы используете?

P/S/
Но все же лучше Lazy Load загрузка.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34279079
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Роман, а чем намного лучше сперва прочитать запросы в таблицы, потом перегнать это в xml, а потом ещё xml парсить, по сравнению с тем способом, что я привёл ранее (параллельно читаем записи из нескольких рекордсетов и сразу на ходу создаём объекты)?
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34279252
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FuzzyРоман, а чем намного лучше сперва прочитать запросы в таблицы, потом перегнать это в xml, а потом ещё xml парсить, по сравнению с тем способом, что я привёл ранее (параллельно читаем записи из нескольких рекордсетов и сразу на ходу создаём объекты)?
Ничем. Единственное, если получится сразу легко получить xml нужного для десериализации вида, то автоматически пропадает необходимость реализации маппинга xml->to object или record->to object.
Правда модель активной записи (опять же по Фаулеру), которую вы описали, будет всегда каждый раз при необходимости повторного использовании объекта мапить запись на объект, что может весьма сказаться на производительности в случае некоторых алгоритмов (например, длительные расчеты, использующие объекты как источник информации).
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34279349
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже, у Фаулера действительно полезная книга. Скажите, пожалуйста, в ней жёстко си-шарп рассматривается, или в общем? А есть где-нибудь на сети, чтоб скачать?

Роман, а зачем я должен буду повторно мапить записи на объекты? Можно пример, чтоб я понял?
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34279395
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опа, уже нашёл, и скачал. Буду читать, спасибо, Роман!
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34279418
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FuzzyПохоже, у Фаулера действительно полезная книга. Скажите, пожалуйста, в ней жёстко си-шарп рассматривается, или в общем? А есть где-нибудь на сети, чтоб скачать?

В сети по-моему в свободном доступе есть на английском, на сайте автора.
Рассматривается все "в общем", примеров на java даже больше по-моему.

Роман, а зачем я должен буду повторно мапить записи на объекты? Можно пример, чтоб я понял?
я так понял по следующему:
Fuzzyи сразу на ходу создаём объекты
Потом, как вы тогда будете синхронизовать recordset c объектами? Держать и рекордсет и глобальную кеш-коллекцию... зачем?
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34279453
Fuzzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Роман, наверное, я лучше сперва почитаю Фаулера...
потом вернёмся к обсуждению, ок?
Потому что пока даже вопроса не могу понять: вот у меня данные в базе, возникла необходимость выбрать на клиента все документы по определённому критерию. Вот я их и выбрал, у меня есть их коллекция, а рекордсеты я бросил после загрузки, зачем они мне? Понятно, что "один и тот же" объект я не буду несколько раз создавать -- если он уже загружался, буду использовать имеющийся инстанс.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34282381
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaТебе здесь не раз объясняли, что в БД объекты не хранятся.

Есть паттерн проектирования Memento - хранитель. Он позволяет отчуждать состояние объекта Originator в объект Memento и помещать его в БД для последующего восстановления состояния исходного объекта Originator. Объект Originator не хранится в БД. Там хранится объект Memento или, если угодно, его копия.

Современные СУБД и API позволяют сосредодочиться на проектировании класса Originator. Класс Memento и соответственно тип записей в таблице БД можно получить почти автоматически из спецификации класса Originator. Механизмы получения объекта Memento из объекта Originator, сохранения его в БД, и обратная процедура реализованы на уровне библиотек, так что проектировщик может отождествлять классы Memento и Originator даже на очень низком уровне абстракции. В данном случае автор опустился ниже этого уровня.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34290868
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenab, непонятно, но здорово!!!Использование паттерна Momento в подобном контексте я нигде не видел.Какие механизмы, какие API, какие обратные процедуры?Если они тождественны, то зачем нужны эти усложнения?С нетерпением жду продолжения.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34290982
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVamcureenab, непонятно, но здорово!!!Использование паттерна Momento в подобном контексте я нигде не видел.Какие механизмы, какие API, какие обратные процедуры?Если они тождественны, то зачем нужны эти усложнения?С нетерпением жду продолжения.

Не Momento, Memento, от memory (или наоборот).

Механизмы системы проектирования. Тот же самый MS Visio в UML моделях позволяет тэгировать атрибуты класса приложения (класс Originator в паттерне Memento) признаком persistent, так что генератору схемы БД ясно, какие таблицы и поля (класс Memento в одноимённом паттерне) нужно унаследовать из диаграммы статической структуры и нет надобности моделировать БД руками.

API для доступа к БД, который обеспечивает постоянство (persistence) объекта, т.е. сохранение состояния объекта в БД в процессе сброса кэш и восстановление этого состояния из БД в кэше в процессе разъименовывания объектной ссылки.

Усложнения возникают, когда мы проектируем БД и классы приложения руками. Современный подход позволяет думать о постоянстве объекта приложения не вникая в механизмы, которые это постоянство обеспечивают.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34291239
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, ты уж совсем буквоед."Банда четырех" -настольная книга.Палец не там застрял.
Сразу становится неинтересно.На мой взгляд, трудности возникают, как раз при таких методах проектирования.Уж слишком много в них ограничений, а когда на запросы посмотришь, совсем дурно становиться.Флейм на эту тему поднимать не будем, это моя точка зрения и я ее никому не навязываю.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34291283
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Область молодая, потому косяков вней встречается изрядное количество, сособенно при попытках скрестить бульдога с носорогом.
Чтобы от запросов не было дурно, СУБД должна поддерживать объектное расширение SQL. Проектировать классы нужно с учётом возможностей платформы. И т.д. и т.п. Скажем так, от повсеместного применения этого подхода в коммерческих приложениях БД я пока воздержусь. Для разработки экранных форм объектные навороты явно лишние (кроме тех объектов-компонентов, что встроены в среду разработки/выполнения). В приложениях со сложной пакетной обработкой данных они могут быть полезными, хотя бы для правильного кэширования данных.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34292690
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabУсложнения возникают, когда мы проектируем БД и классы приложения руками. Это смотря с чьей точки зрения "усложнения". С т.з. низкоквалифицированного ООП кодера отдельное проектирование базы - безусловно "усложнение", он в этом все равно ничего не понимает. С т.з. нормального архитектора - база и "классы приложения" могут и должны рассматриваться отдельно хотя бы потому, что с базой зачастую работает не одно приложение
mcureenabСовременный подход позволяет думать о постоянстве объекта приложения не вникая в механизмы, которые это постоянство обеспечивают. опоздали вы с "современным подходом" Мода на MDA уже прошла. Сейчас SOA модно.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34292912
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey KudinovМода на MDA уже прошла. Сейчас SOA модно.
MDA и SOA НЕ являются взаимозаменяющими подходами, скорее они могут дополнять друг друга. SOA - взаимодействие. MDA - разработка приложений, управляемых моделью.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34292996
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Роман ДынникSOA - взаимодействие. MDA - разработка приложений, управляемых моделью. И да и нет. В случае MDA разработка идет "от модели", в случае SOA [в значительной части] "от сервисов". Т.е. SOA - это взаимодействие конечно, но взаимодействие весьма значительно влияющее на архитектуру приложения.

Я их сравнивал в плане новизны тенденций в проектировании. Не в плане взаимозаменяемости.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34293105
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey KudinovС т.з. нормального архитектора - база и "классы приложения" могут и должны рассматриваться отдельно хотя бы потому, что с базой зачастую работает не одно приложение


Полагаю, тут речь идёт о разделении класса спецификации и класса реализации. Чтобы объект оставался целостным его методы должны работать одинаково независимо от места развёртывания этого объекта. В идеальном случае класс реализуется только в одном компоненте системы, поэтому работает одинаково во всех её приложениях.

Усложнять классы постоянных объектов нет смысла. Как правило такие классы моделируют сущности, а сущности по определению не имеют поведения. Поведение определяют классы-агенты, которые реализуют бизнес-правила и службы системы.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34293188
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Kudinov Роман ДынникSOA - взаимодействие. MDA - разработка приложений, управляемых моделью. И да и нет. В случае MDA разработка идет "от модели", в случае SOA [в значительной части] "от сервисов". Т.е. SOA - это взаимодействие конечно, но взаимодействие весьма значительно влияющее на архитектуру приложения.


Так SOA, это и есть архитектура, точнее принцип построения. Только SOA это архитектура самой системы, а MDA архитектура разработки системы.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34293192
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOA - архитектура взаимодействия, MDA - чистое проектирование предметной области и создание приложения по модели.
Так или иначе, опираясь или не опираясь на SOA, нужна модель предметной области, для управления которой по большому счету и существует MDA. С сообщениями/контрактами SOA напрямую (по-хорошему) приложения не должны работать. Бизнес-логика работает с объектами предметной области, объекты предметной области передаются слою ServiceAgents, которые обращаются к соответствующим сервисами, транслируя объекты в сообщения, DataContract...
Т.о. если разработка идет от сервисов, все равно необходим двусторонний маппинг сообщений сервисов на объекты предметной области. Работать напрямую с сервисами, это все равно что использовать запись recordset-а в качестве бизнес-объекта.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34293215
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabТолько SOA это архитектура самой системы, а MDA архитектура разработки системы.
Это уже более реальное утверждение.
...
Рейтинг: 0 / 0
Как выбрать из базы коллекцию объектов?
    #34295401
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребята, с удовольствием читаю данный топик!!!
Много модных и умных слов, но за частоколом терминологии не понятно, что скрывается.То Originator тождественен Memento, то в БД живут объекты, то разработка ведется от сервисов и тд.
Перечитываю по три раза,ничего не понимаю, еще читаю, но эффект тот же.
Продолжайте в том же духе. С интересом буду наблюдать продолжение.
...
Рейтинг: 0 / 0
90 сообщений из 90, показаны все 4 страниц
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как выбрать из базы коллекцию объектов?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]