Реализация восстановления реализации - PullRequest
1 голос
/ 05 октября 2019

У меня есть редактор и некоторые файлы открыты. Я делаю некоторые изменения и не сохраняю их. По какой-то причине мое приложение вылетает.
После этого я снова запускаю приложение и хочу, чтобы редактор показывал сообщение вроде: «Система неожиданно завершилась сбоем. В ваших файлах есть изменения, которые не были сохранены. восстановить их или загрузить исходное состояние?

Я хочу реализовать нечто подобное.
Первой мыслью было создание папки Temp, которая используется для хранения измененных копий исходных файлов. Эти копии обновляются при каждом изменении в редакторе или в обычное время как автосохранение. Когда я нажимаю Сохранить, временная копия просто заменяет оригинал. В случае сбоя системы я выбираю либо временную, либо исходную для загрузки.
Второй - сохранить журнал изменений в связанном файле, как для механизма отмены / возврата, и, если необходимо, повторить действия шаг за шагом. Но это слишком дорого и сложно реализовать в сравнении.
И третье - сохранить измененную копию данных в том же файле с исходными данными (если данные не слишком большие, конечно) и действовать как в первом случае, но без Tempпапки.

Так есть ли какие-то шаблоны, типичные подходы или структуры данных для этой проблемы?

1 Ответ

1 голос
/ 05 октября 2019

Вы можете использовать журнал аудита (https://martinfowler.com/eaaDev/timeNarrative.html),, поэтому вы должны отслеживать изменения, которые вы сделали в файле (различия). Эта запись может быть представлена ​​в виде строки в таблице базы данных или в последовательной структуре водин файл. Другой способ сделать это - через источник событий (https://kickstarter.engineering/event-sourcing-made-simple-4a2625113224) для вашего приложения, где вы можете хранить в памяти базу данных отслеживания, используя события для сохранения различий. Вы можете ограничить сохраненные события до максимума. в качестве буфера, так что вы можете отменить до шага назад.

Если вы хотите пойти глубже, вы можете проверить это https://wyag.thb.lt/, и попытаться найти идеи для разработки системы отслеживания контента с автокоммитом, чтобы добавитьв ваш редактор на основе принципов GIT.

Но если вы ищете «легкий путь», вы можете использовать шаблон памяти (https://en.wikipedia.org/wiki/Memento_pattern), смешанный с шаблоном наблюдателя (* 1014)* чтобы сохранить наблюдаемые изменения в файлах, используя Ответственный, где каждый инициатор является каждым редактором файлов, а каждый сувенир представляет собой запись с последней копией.

Другие ссылки:

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