powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Схема построения приложения
10 сообщений из 10, страница 1 из 1
Схема построения приложения
    #35526625
Мне интересно как вы стоите свои приложения для многопользовательской работы.
Мой метод следующий.
Есть файловая база данных DBC, в приложении пользователь вызывает форму, данные из таблиц селектом перекочевывают в курсор. Дальше пользователь работает с курсором. Если он сделал какие либо изменения или добавил новую запись, то нажимается кнопка SAVE и данные сохраняются в таблице с помощью (SQL INSERT, UPDATE, DELETE).
Вопрос, на сколько такая система жизнеспособна и не упустил ли я что-либо в блокировках?
...
Рейтинг: 0 / 0
Схема построения приложения
    #35526667
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Два пользователя одновременно запросили и получили данные. Закачали в локальные курсоры. Каждый внес какие-то свои изменения. Теперь оба они по очереди нажимают кнопку "Сохранить". Что имеет в базе данных? Очевидно, данные того пользователя, который нажал кнопку "Сохранить" последним. Т.е. первый пользователь потерял свои изменения без каких-либо "извинений" и "предупреждений" со стороны приложения.

Вас такая стратегия работы устравивает? Если "Да", то Ваша система вполне жизнеспособна.

Стратегия работы в сетевом режиме зависит от постановки задачи и личных предпочтений программиста. Существуют две принципиальные стратегии: пессимистическая и оптимистическая. Каждая имеет достоинства и недостатки.

Пессимистическая.

Как только пользователь предпринимает попытку что-то изменить в исходных данных эти данные блокируются. И другой пользователь уже в принципе не может ничего изменить в тех же данных, пока первый пользователь не закончит редактирование и не снимет блокировку.

Достоинства - в принципе невозможны конфликты совместного доступа. Та ситуация, которая описана в самом начале темы.

Недостатки - пользователь начал редактировать данные, но тут отвлекся, а потом ушел "на обед". А все остальные пользователи ждут, когда же он вернется.

Оптмистическая.

Пользователи работают с копией данных и ничего не знают о том, как работают другие пользователи до того момента, как нажимают кнопку "Сохранить". Именно в этот момент происходит блокировка данных, но на очень короткий промежуток времени. Только для того, чтобы сбросить накопившиеся изменения.

Достоинства - нет периода "ожидания". Никто никого не ждет. Создается иллюзия, что пользователь работает один с приложением.

Недостатки - конфликты совместного доступа. Та ситуация, которая была описана в самом начале. Изменения одного пользователя могут затереть изменения другого.


Еще раз повторю, какую стратегию выбрать, зависит от конкретной задачи и личных предпочтений программиста.

Хочу только еще заметить, что то, что Вы делаете - это "закат солнца вручную". В том смысле, что в FoxPro существуют инструменты, которые делают все тоже самое, но автоматически.

Во-первых - это собственно режим буферизации. Можно наложить прямо на исходную таблицу. Хотя, как правило, этого не делается.

Во-вторых - это объект Local View. Если сделать его обновляемым, то сделанные в нем изменения будут "сбрасываться" в исходные таблицы.

В-третьих - это класс CursorAdapter (введен в VFP8). По сути, это расширение возможностей Local View. Больше мест, где есть возможность вмешаться программисту в процесс выборки данных и сброса изменений в исходные таблицы.
...
Рейтинг: 0 / 0
Схема построения приложения
    #35526717
Спасибо Владимир за столь обстоятельный ответ. Вы как всегда в ударе.
Про "закат солнца вручную" согласен, но мне так больше нравится. Попробую и с CursorAdapter конечно. Для меня важна сама методология, т.е. сформировать ряд правил, чтобы в последствии было легко писать и поддерживать большие приложения. На C++ делаю в принципе тоже самое, т.е. формирую локальный снимок у пользователя со служебными данными, и сбрасываю при сохранении обратно, но только то, что изменили конечно.
Про коллизию можно не беспокоиться, пусть пользователи себе изменяют данные )))
...
Рейтинг: 0 / 0
Схема построения приложения
    #35527343
Dag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В некоторых приложениях (FPW2.6) я использовал изложенную стратегию. Чтобы не возникала
указанная выше коллизия я блокировал редактируемую запись командой LOCK. При попытке открыть ее другой пользователь получал сообщение о том, что запись редактируется, кнопка Save cоответственно делалась недоступной.
...
Рейтинг: 0 / 0
Схема построения приложения
    #35527366
Dag вы сказали в прошлом. А как дела обстоят сейчас?
...
Рейтинг: 0 / 0
Схема построения приложения
    #35527604
Dag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если честно-то, схема получилась достаточно удачной и этот допотопный метод вполне работает и под VFP6, VFP9. Так что я даже не удосужился изучить буферизацию, Local View и прочие навороты, реализующие подобный функционал. Ибо для моих скромных целей нужды в этом просто не возникало.
Но т-с-с! Гуру засмеют.

Если Вы беретесь создавать код для подобных целей и не обременены поддержкой решений созданных во "времена покорения Крыма", то советую обратить внимание на CursorAdapter. Интересная штучка-мне кажется, что при необходимости позволит перенести данные из табличек dbf на SQL-сервер, без особых переделок в программе, ориентированной на работу с данными, представляемыми посредством курсорадаптеров.
...
Рейтинг: 0 / 0
Схема построения приложения
    #35527608
Galyamov Rinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пессиместические блокировки - это очень плохо.
Например:

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

Соответственно при попытки накатить такие обновления имеем кучу
предупреждений, о том, что запись в данный момент занята. А это не есть
хорошо.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Схема построения приложения
    #35527772
авториз табличек dbf на SQL-сервер, без особых переделок в программе

курсорадаптер для родных таблиц и ODBC
и принцип работы с ними отличаются в некоторых местах,
поэтому без особых не получится

но, конечно навыки работы с КАДами оч.пригодятся
и сэкономят время и силы при переходе на работу с SQL сервером
...
Рейтинг: 0 / 0
Схема построения приложения
    #35528246
Гость....
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно и обработчик сделать обновлений, спрашивать у юзверя, типа данные были изменены другим пользователем, менять или пропустить и пр. Я на основе стандартного класса написал обработчик, кой чего переделал. Так что так же работаю, через курсор скидываю в буфферизированную таблицу и потом проверку делаю.
...
Рейтинг: 0 / 0
Схема построения приложения
    #35528949
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересующийся_ Если он сделал какие либо изменения или добавил новую запись, то нажимается кнопка SAVE и данные сохраняются в таблице с помощью (SQL INSERT, UPDATE, DELETE).
Вопрос, на сколько такая система жизнеспособна и не упустил ли я что-либо в блокировках?

Вполне жизнеспособна, только надо добвавить ещё выполнение модификации данных в транзакции.

Но лучше всё таки для сброса изменений в таблички использовать буфферизацию, один из плюсов - значительно легче будет написать обработчик ошибок, ведь 90% уже написано FoxTeam.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Схема построения приложения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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