crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Проектирование UI и использование транзакций
Majestio
  опции профиля:
сообщение 4.4.2013, 5:46
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 67
Регистрация: 13.2.2013
Пользователь №: 3710

Спасибо сказали: 1 раз(а)




Репутация:   1  


Возник немного комплексный вопрос: как правильно (ну или какие есть приемлемые варианты) организовать пользовательский интерфейс и использовать транзакции для отката в случае отказа пользователя сохранить изменения, в случаях ошибок? Какие ограничения в UI уместны и обоснованы? Вобщем, нужна критика и предложения. Использую Qt и PostgreSQL.

Ситуация такова.

Есть две сущности "Карточки Клиентов" (КК) и "Карточки обслуживания" (КО). Связаны между собой отношением многие-ко-многим. Иными словами - КК может иметь список, состоящий из множества "привязанных" КО. В свою очередь каждая КО может быть как индивидуальной, так и групповой, т.е. включать множество КК. В программе используется SDI.

Примерный сценарий работы:

1. Сотрудник вызывает модальный диалог "Новая КК" (Д1), заполняет основные поля
2. Переключается на вторую вкладку этого диалога "Обслуживание" - там пустая таблица
3.Сотрудник получает возможности:
3.1. выбрать из существующих обслуживаний и включить в нее создаваемого пользователя
3.2. создать новое обслуживание вызвав модальный диалог "Новое Обслуживание" Д2 и включить в него пользователя (автоматом при создании)
4.В диалоге "Новое обслуживание" или "Редактирование Обслуживания" он так же может создать или удалить КК
...
Далее цепочка может быть бесконечной - КК позволяет создавать, редактировать и удалять КО, в свою очередь при редактировании КО - можно создавать, редактировать и удалять КК.

Как собираюсь все это обрабатывать

1. Ограничения по вложенностям вводить не буду;
2. Для обеспечения откатов - перед вызовом первого диалога объявляю транзакцию, и точку отката - если очередной диалог отменен пользователем - откатываюсь до последней точки отката;
3. Глобально веду списки КК и КО, чтобы избежать повторных редактирований или удалений;
4. Веду блокировки записей КК и КО дабы избежать сюрпризов при многопользовательском доступе;
5. Перед вызовом нового диалога, данные по текущему диалогу сбрасываю в БД (иначе привязать к несохраненным данным не получиться, если не строить древовидных структур в памяти, а потом пытаться их обработать);

Как быть с обработкой возможных ошибок при работе с БД в n-ом вложенном диалоге диалоге?
Что будет с открытой транзакцией, если клиент вообще вылетит из сеанса работы с БД по какой-нибудь из причин?

Извините, что вот так сумбурно. Пока не могу все нюансы собрать воедино.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Iron Bug
  опции профиля:
сообщение 4.4.2013, 19:24
Сообщение #2


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


Цитата(Majestio @ 4.4.2013, 8:46) *
Как быть с обработкой возможных ошибок при работе с БД в n-ом вложенном диалоге диалоге?

что подразумевается под ошибками?

Цитата(Majestio @ 4.4.2013, 8:46) *
Что будет с открытой транзакцией, если клиент вообще вылетит из сеанса работы с БД по какой-нибудь из причин?

ничего не будет. она просто откатится, изменения не сохранятся.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 27.4.2024, 16:14