|
|
|
Выбор архитектуры
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Хочу спросить, насколько корректно следующее проектное решение. Есть класс TClient - клиент TOrder - счет TOrders - класс контейнер (коллекция), который является списком счетов клиента где каждый элемент имеет тип TOrder. Объект Client ссылается на объект Orders через поле Client.Orders При выборе клиента из базы создаются объекты Client, Orders. Поля объекта Client заполняются личными данными клиента, в коллекцию Orders добавляются объекты Order, каждый из которых содержит информацию о конкретном счете. На основе прочитанных из БД данных строится древовидное меню вида Клиент (Иванов Иван) | Счета | Счет №1 сумма 100 | Счет №2 сумма 200 | Счет №3 сумма 300 Каждый нод ссылается на соответствующий объект Order. Таким образом при двойном клике на том или ином ноде мы получаем ссылку на соответствующий объект (Order) и передаем ее в редактор счета, где оператор может отредактировать поля данного объекта. После окончания редактирования данные обновляются в базе. Вроде бы все просто и красиво, однако получается, что данные после чтения из базы оказываются прокешированны у оператора и не синхронизированы с БД. Например, два оператора одновременно открыли одного клиента. У обоих в приложении создались идентичные объекты с идентично заполненными полями. Затем один оператор удалил счет №1, а второй оператор в это время его отредактировал и попытался записать. Таким образом получается что в базе данных счета уже нет а программный объект у второго оператора все равно присутствует в коллекции. Аналогичная история происходит и с обновлением данных. Один оператор редактирует счет и при этом не знает, что другой оператор его тоже редактирует. Таким образом в БД сохраниться информация от того оператора, который последним нажал кнопку "обновить". Получается, что чем больше в приложении создается объектов тем больше вероятность рассогласования данных. Вопрос! Приемлемо ли это проектное решение в рамках описанного прецедента или есть более рациональные решения? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2009, 13:24 |
|
||
|
Выбор архитектуры
|
|||
|---|---|---|---|
|
#18+
ClearSkyХочу спросить, насколько корректно следующее проектное решение. нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2009, 13:58 |
|
||
|
Выбор архитектуры
|
|||
|---|---|---|---|
|
#18+
trdm, Какое же тогда решение будет корректным? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2009, 14:01 |
|
||
|
Выбор архитектуры
|
|||
|---|---|---|---|
|
#18+
ClearSkytrdm, Какое же тогда решение будет корректным? Которое вы примете после добросовесного изучения курса по реляционным базам данных. Модератор: Тема перенесена из форума "Разработка информационных систем". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2009, 14:03 |
|
||
|
Выбор архитектуры
|
|||
|---|---|---|---|
|
#18+
Проходил это 2 раза. Создавал систему классов. Закачивал из БД, затем обрабатывал. Получал 1) ужасно медленную работу 2) отсутствие изоляции транзакций С тех пор стараюсь все операции выполнять только на сервере. Получается компактнее, проще, меньше ошибок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2009, 14:22 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=36382152&tid=1542922]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
186ms |
get topic data: |
13ms |
get forum data: |
4ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
| others: | 234ms |
| total: | 534ms |

| 0 / 0 |
