Здравствуйте, grosborn, Вы писали:
G>В общем случае пользователь не может сравнить две версии и сказать, какая корректная.
В общем случае программа это может в ещё меньшей степени. Не давать перезаписать версию более позднюю, чем изначально редактировавшаяся, как и перезаписывать безусловно — не выходы.
G>Вот представь: открыл ты документ, поправил дату, сохраняешь — а она тебе: уважаемый пользователь, вот тут у меня образовались две версии документа, какую выберешь??? А документ — вторая часть гражданского кодекса
Ну править кодекс будет юрист, так что он разберётся что правильнее. Потом проблема абсолютно надуманная. Все пользователи VCS пользуются тем или иным видом Merge и не плачут.
>> G>Зачем нам устаревшая?
>> Затем что понял — был не прав
G>Нет, не так.
Ты не понял. Я долго редактировал данные и в какой-то момент понял что совершил ошибочное редактирование и мне проще отредактировать исходную версию с начала, чем менять обратно то, что есть. В этом случае логичнее открыть форму заново.
G>Более правильным является возможность выбора либо свей уже отредактированной версии, либо сохраненной другим пользователем. Но по результату записи документа другим пользователем, версия по состоянию на момент чтения данных формы, а как следствие и текущая отредактированная версия уже могут стать некорректными. Например — необратимые операции удаления объекта или операции удаления ссылок из текущего объекта и удаления зависящих объектов. поэтому собственно и остается один вариант — Обновить.
Это далеко не единственный вариант. Просто правильный вариант всегда сложнее. Скажем объекты можно никогда не удалять, а только помечать как удалённые. Тогда новая, ссылающаяся на ранее удалённые объекты, версия запросто "оживит" их записью одного bool. Ну и т. д.
G>Поэтому лучше не заморачиваться и делать стандартно.
Ну вот пример с объектами выше взят из Active Directory, где БД распределённая и ни один объект сразу не удаляется. Это считается стандартно? Вообще что значит стандартно?