Russian Qt Forum
Ноябрь 24, 2024, 02:32
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Кладовая готовых решений
(Модератор:
Пантер
) >
Вопрос сохранения данных.
Страниц:
1
[
2
]
3
4
5
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Вопрос сохранения данных. (Прочитано 31964 раз)
alexis031182
Гость
Re: Вопрос сохранения данных.
«
Ответ #15 :
Июнь 19, 2012, 14:28 »
Вы быстрее задаёте вопросы, нежели чем я успеваю печатать ответы
Цитата: nata267 от Июнь 19, 2012, 14:12
вот я и справшиваю. как реализован ваш медиатор в контексте данной задачи. классы, хранящие состояние виджетов знают о нем, он знает о них. вопрос. что он делает? и что собой представляют эти классы, хранящие состояние виджетов?
Никак нереализован, у меня другой медиатор, для других целей. Я лишь предложил своё виденье.
Класс состояния виджета - произвольный класс, содержащий в себе данные об изменённых параметрах виджета в определённый момент времени (на момент изменения).
Именно медиатор должен быть управлящим всего этого хозяйства.
Цитата: nata267 от Июнь 19, 2012, 14:12
по идее через медиатор они должны обмениваться сообщениями. какими именно сообщениями могут обмениваться ваши классы, хранящие состояние виджетов? зачем им вообще обмениваться сообщениями? если нужен обход, то это итератор, а не медиатор, а ваш медиатор я не представляю себе его никаак
А я не могу понять, при чём здесь итератор и какой-то обход
Я постараюсь сформулировать более понятно идею и напишу чуть позже.
Записан
nata267
Гость
Re: Вопрос сохранения данных.
«
Ответ #16 :
Июнь 19, 2012, 14:45 »
Цитата: alexis031182 от Июнь 19, 2012, 14:28
Вы быстрее задаёте вопросы, нежели чем я успеваю печатать ответы
Цитата: nata267 от Июнь 19, 2012, 14:12
вот я и справшиваю. как реализован ваш медиатор в контексте данной задачи. классы, хранящие состояние виджетов знают о нем, он знает о них. вопрос. что он делает? и что собой представляют эти классы, хранящие состояние виджетов?
Никак нереализован, у меня другой медиатор, для других целей. Я лишь предложил своё виденье.
Класс состояния виджета - произвольный класс, содержащий в себе данные об изменённых параметрах виджета в определённый момент времени (на момент изменения).
Именно медиатор должен быть управлящим всего этого хозяйства.
Цитата: nata267 от Июнь 19, 2012, 14:12
по идее через медиатор они должны обмениваться сообщениями. какими именно сообщениями могут обмениваться ваши классы, хранящие состояние виджетов? зачем им вообще обмениваться сообщениями? если нужен обход, то это итератор, а не медиатор, а ваш медиатор я не представляю себе его никаак
А я не могу понять, при чём здесь итератор и какой-то обход
Я постараюсь сформулировать более понятно идею и напишу чуть позже.
обход структуры виджетов или структуры ваших состояний виджетов, обход во время сохранения, чтобы вызвать запросы на обновление данных
Записан
alexis031182
Гость
Re: Вопрос сохранения данных.
«
Ответ #17 :
Июнь 19, 2012, 15:07 »
Цитата: nata267 от Июнь 19, 2012, 14:45
обход структуры виджетов или структуры ваших состояний виджетов, обход во время сохранения, чтобы вызвать запросы на обновление данных
Ну так это же один раз по кнопке Сохранить, а не при каждом изменении каждого виджета.
Записан
nata267
Гость
Re: Вопрос сохранения данных.
«
Ответ #18 :
Июнь 20, 2012, 13:56 »
в вопросе сохранения данных есть ещё такой момент как иерархические структуры связанные по parent_id. Если поле id autoincrement в базе данных. То при вставке дочерных надо знать id только что вставленного родителя. Допустим с обновлением и удалением более или менее все понятно. Но как решается данная проблема вставки иерархических структур?
Записан
alexis031182
Гость
Re: Вопрос сохранения данных.
«
Ответ #19 :
Июнь 20, 2012, 14:02 »
Цитата: nata267 от Июнь 20, 2012, 13:56
...
То при вставке дочерных надо знать id только что вставленного родителя.
...
А в чём проблема? Любая БД поддерживает LastInsertId
Записан
nata267
Гость
Re: Вопрос сохранения данных.
«
Ответ #20 :
Июнь 20, 2012, 14:13 »
Цитата: alexis031182 от Июнь 20, 2012, 14:02
Цитата: nata267 от Июнь 20, 2012, 13:56
...
То при вставке дочерных надо знать id только что вставленного родителя.
...
А в чём проблема? Любая БД поддерживает LastInsertId
допустим если обходить эту структуру сверху вниз то эта проблема решаема, а если есть объекты со связями многие ко многим. как с ними быть? Для этих связей создавать отдельные объекты? И сохранять их в последнюю очередь, те когда будут известны id вставляемых связываемых объектов?
«
Последнее редактирование: Июнь 20, 2012, 14:21 от nata267
»
Записан
alexis031182
Гость
Re: Вопрос сохранения данных.
«
Ответ #21 :
Июнь 20, 2012, 14:37 »
Цитата: nata267 от Июнь 20, 2012, 14:13
допустим если обходить эту структуру сверху вниз то эта проблема решаема, а если есть объекты со связями многие ко многим. как с ними быть? Для этих связей создавать отдельные объекты? И сохранять их в последнюю очередь, те когда будут известны id вставляемых связываемых объектов?
Обычно в таких ситуациях связи всегда выделяют в отдельную таблицу. Тогда:
1. вставляются записи данных, получая через lastinsertid их индексы;
2. вставляются записи связей, которые и будут содержать id записей данных.
Записан
nata267
Гость
Re: Вопрос сохранения данных.
«
Ответ #22 :
Июнь 20, 2012, 14:41 »
Цитата: alexis031182 от Июнь 20, 2012, 14:37
Цитата: nata267 от Июнь 20, 2012, 14:13
допустим если обходить эту структуру сверху вниз то эта проблема решаема, а если есть объекты со связями многие ко многим. как с ними быть? Для этих связей создавать отдельные объекты? И сохранять их в последнюю очередь, те когда будут известны id вставляемых связываемых объектов?
Обычно в таких ситуациях связи всегда выделяют в отдельную таблицу. Тогда:
1. вставляются записи данных, получая через lastinsertid их индексы;
2. вставляются записи связей, которые и будут содержать id записей данных.
а если в одном из связываемых объектов создать список указателей на другие связываемые объекты. Сохранить сначала их, а потом сохранить первый связываемый объект. Пройтись по списку указателей на связываемые объекты, у которых уже известны id и создать связи. Или даже хранить не указатели на объекты, а указатели на связи с объектами. и у связей тоже будут статусы deleted, modified
«
Последнее редактирование: Июнь 20, 2012, 14:42 от nata267
»
Записан
nata267
Гость
Re: Вопрос сохранения данных.
«
Ответ #23 :
Июнь 20, 2012, 14:44 »
Цитата: nata267 от Июнь 20, 2012, 14:41
Цитата: alexis031182 от Июнь 20, 2012, 14:37
Цитата: nata267 от Июнь 20, 2012, 14:13
допустим если обходить эту структуру сверху вниз то эта проблема решаема, а если есть объекты со связями многие ко многим. как с ними быть? Для этих связей создавать отдельные объекты? И сохранять их в последнюю очередь, те когда будут известны id вставляемых связываемых объектов?
Обычно в таких ситуациях связи всегда выделяют в отдельную таблицу. Тогда:
1. вставляются записи данных, получая через lastinsertid их индексы;
2. вставляются записи связей, которые и будут содержать id записей данных.
а если в одном из связываемых объектов создать список указателей на другие связываемые объекты. Сохранить сначала их, а потом сохранить первый связываемый объект. Пройтись по списку указателей на связываемые объекты, у которых уже известны id и создать связи. Или даже хранить не указатели на объекты, а указатели на связи с объектами. и у связей тоже будут статусы deleted, modified
вопрос не в очередности, а в том как делать обход?? в какой структуре это хранить и как делать обход этой структуры в момент сохранения. в любом случае придется делать приоритет. то есть объекты одного типа сохраняются раньше объектов другого типа
«
Последнее редактирование: Июнь 20, 2012, 14:47 от nata267
»
Записан
alexis031182
Гость
Re: Вопрос сохранения данных.
«
Ответ #24 :
Июнь 20, 2012, 14:55 »
Я думал Вы про БД спрашивали выше. Всё смешалось в доме Облонских.
Записан
alexis031182
Гость
Re: Вопрос сохранения данных.
«
Ответ #25 :
Июнь 20, 2012, 15:00 »
Цитата: nata267 от Июнь 20, 2012, 14:44
вопрос не в очередности, а в том как делать обход??
Обход по идее с верхнего родительского уровня начинать надо.
Цитата: nata267 от Июнь 20, 2012, 14:44
в какой структуре это хранить и как делать обход этой структуры в момент сохранения.
Под "структурой" что Вы понимаете? У Вас есть дерево объектов. Родители со ссылками (указателями) на дочерние объекты. Зачем нужны какие-то дополнительные мегаобразования?
Цитата: nata267 от Июнь 20, 2012, 14:44
в любом случае придется делать приоритет. то есть объекты одного типа сохраняются раньше объектов другого типа
Здесь Вы уже на своей волне.
Записан
nata267
Гость
Re: Вопрос сохранения данных.
«
Ответ #26 :
Июнь 27, 2012, 11:04 »
C одной табличкой бд все здорово получается и сохранение всех изменений и действия undo/redo, cut, copy, paste. но как только появляется связь с другой табличкой "многие ко многим" с undo/redo и сохранением всех действий получается какая-то жесть... без undo/redo и с сохранением сразу в базу все получается. очень хочется плюнуть на это дело.
Записан
alexis031182
Гость
Re: Вопрос сохранения данных.
«
Ответ #27 :
Июнь 27, 2012, 11:20 »
Бейтесь, не смотря ни на что. Попробуйте мыслить нестандартно. Или в конце концов просто отложите поиск решения на лучшее время, а пока займитесь другой тактической задачей. Иногда идеи приходят невзначай, провидение подскажет.
Мне кажется, что такая задача не имеет паттерного решения. Она индивидуальна в каждом конкретном приложении и исходит из его условий. Моё виденье решения этой задачи скорее всего не соответствует тому, что должно происходить в Вашем случае, а значит рекомендации с моей стороны попросту ни к чему не приведут. Впрочем, это Вы итак уже заметили.
Undo/redo, как очень справедливо отметил Игорь, весьма нетривиальная задача. Вполне вероятно, что со сложносоставными объектами она вообще не имеет решения. Точнее сказать, затраты на обслуживание объектов в "корзине" становятся столь высокими, что проще действительно "забить" на это дело. Суперуниверсализм не всегда достижим. Впрочем, сдаваться и опускать руки - последнее дело.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Вопрос сохранения данных.
«
Ответ #28 :
Июнь 27, 2012, 11:33 »
Цитата: nata267 от Июнь 27, 2012, 11:04
C одной табличкой бд все здорово получается и сохранение всех изменений и действия undo/redo, cut, copy, paste. но как только появляется связь с другой табличкой "многие ко многим" с undo/redo и сохранением всех действий получается какая-то жесть... без undo/redo и с сохранением сразу в базу все получается. очень хочется плюнуть на это дело.
Да, при "связках объектов" (даже без базы) undo часто получается исключительно трудным и требует затрат/кода во много раз превышающего само действие.
Цитата: alexis031182 от Июнь 27, 2012, 11:20
Бейтесь, не смотря ни на что. Попробуйте мыслить нестандартно. ....Суперуниверсализм не всегда достижим. Впрочем, сдаваться и опускать руки - последнее дело.
Слова-то хорошие, но подозреваю что без конкретного примера/задачи эффект (увы) все же нулевой
Проблема в том что привести такой пример очень трудно. Или "все просто и все получается, какой чудесный паттерн" или др крайность - такая тонна специфики что понять человеку вне проекта нереально
Записан
nata267
Гость
Re: Вопрос сохранения данных.
«
Ответ #29 :
Июнь 27, 2012, 11:54 »
Цитата: Igors от Июнь 27, 2012, 11:33
Цитата: nata267 от Июнь 27, 2012, 11:04
C одной табличкой бд все здорово получается и сохранение всех изменений и действия undo/redo, cut, copy, paste. но как только появляется связь с другой табличкой "многие ко многим" с undo/redo и сохранением всех действий получается какая-то жесть... без undo/redo и с сохранением сразу в базу все получается. очень хочется плюнуть на это дело.
Да, при "связках объектов" (даже без базы) undo часто получается исключительно трудным и требует затрат/кода во много раз превышающего само действие.
Цитата: alexis031182 от Июнь 27, 2012, 11:20
Бейтесь, не смотря ни на что. Попробуйте мыслить нестандартно. ....Суперуниверсализм не всегда достижим. Впрочем, сдаваться и опускать руки - последнее дело.
Слова-то хорошие, но подозреваю что без конкретного примера/задачи эффект (увы) все же нулевой
Проблема в том что привести такой пример очень трудно. Или "все просто и все получается, какой чудесный паттерн" или др крайность - такая тонна специфики что понять человеку вне проекта нереально
У меня задача вроде бы и простая, но чето никак. суть в том что у меня есть окошко с QTreeView+QStandardItemModel. Дерево состоит из двух уровней. Первый уровень - это данные из одной таблицы. Второй уровень - данные из другой таблицы. Между этими табличками связь "многие-ко-многим". То есть если я добавляю дочерний узел, то эта запись должна пойти в базу и прицепиться к родительскому узлу. Для наглядности картинку с окошком прицепила. Вот если я убираю дочерние узлы, то реализуется все на раз-два. А сними начинается куча проблем. Дочерние узля кстати можно создавать и в окошке и выбирать ранее созданные из базы этих объектов (по тз было перетаскиванием, короче там ещё dragand drop замешан))), вот.
«
Последнее редактирование: Июнь 27, 2012, 11:59 от nata267
»
Записан
Страниц:
1
[
2
]
3
4
5
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...