Разработка проверяемой системы, которая не требует сложного анализа при сохранении - PullRequest
0 голосов
/ 27 сентября 2019

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

Стратегия 1 - наш текущий выбор

Система, с которой мы сейчас экспериментируем, состоит в создании новой записи каждый раз, когда производится обновление, и при запросе просто получайте записи с самой последней отметкой времени created_on.В случае, если у нас есть отношения родитель-потомок, и дочерний объект должен быть обновлен, мы просто обновили бы дочерний элемент, а не родительский.Запрашивая их, мы применяем одну и ту же стратегию для каждого зависимого отношения.

Стратегия 2 - нам это не очень нравится

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

В заключение хочу подчеркнуть, что основная причина, по которой мы не придерживаемся стратегии 1 , заключается в том, чтобысохранить данные, это требует от нас пройти довольно сложный процесс сравнения, который нам не нравится .Каждый раз, когда веб-интерфейс вызывает наш API с новой полезной нагрузкой, мы выбираем последний агрегат (родитель + дети + внуки и т. Д.), Выполняем полный анализ и определяем, что обновлять.

Поэтому мой вопрос к вам, ребята, таков:Вы использовали какие-либо другие стратегии аудита, которыми вы гордитесь и хотели бы поделиться?

1 Ответ

0 голосов
/ 27 сентября 2019

Я предлагаю вам рассмотреть следующий подход в дополнение к тому, что у вас уже есть:

Структура аудита

Для каждой таблицы, которую вы хотите проверить, создайте еще одну для записей аудита с полями, которые вы хотитеАудит плюс поле revision (и любые другие поля, которые вы хотите).Например, если у вас есть таблица "Order", создайте поле "Order_aud".

Revision должно увеличивать счетчик, это упорядочит ваши записи аудита.Также вы можете сделать его уникальным для каждой транзакции, если хотите иметь возможность идентифицировать набор объектов, которые были сохранены в одной транзакции.

Обновление данных

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

Выборка данных

Все будет так же, как и сейчас, потому что вы не меняете исходные таблицы ввсе.

Очень похожий подход используется в Hibernate Envers .Это позволит вам работать с аудитом независимо от фактических данных, вы можете удалить их, вы можете разбить их на части, вы можете разделить их на части, вы можете заархивировать их, и вы можете легко отключить их, чтобы ваше приложение работало, как раньше.

...