Как вы реализуете контрольный журнал для ваших объектов (Программирование)? - PullRequest
9 голосов
/ 29 сентября 2008

Мне нужно реализовать контрольный журнал для добавления / редактирования / удаления на моих объектах, я использую ORM (XPO) для определения своих объектов и т. Д. Я реализовал объект контрольного журнала, который запускается на

  1. OnSaving
  2. OnDeleting

Базового объекта, и я храню изменения в таблице Audit-AuditTrail (Mast-Det) для изменений полей. и т. д. с использованием некоторых методов, называемых службами.

Как реализовать контрольный журнал в вашем ООП-коде? Пожалуйста, поделитесь своими мыслями? Какие-то шаблоны и т. Д.? Лучшие практики и т.д? Другое дело, как отключить аудит при запуске модульного теста, так как мне не нужно их проверять, но поскольку базовый объект имеет код.

Изменения в объекте (edit / add / del) и какие изменения полей необходимо проверять

Ответы [ 6 ]

7 голосов
/ 29 сентября 2008

Триггеры базы данных являются предпочтительным способом, если вы можете.

Однако недавно мне пришлось сделать это в коде на стороне клиента, и я закончил тем, что написал класс, который создал глубокую (значение) копию объекта, когда он был открыт для редактирования, сравнил два объекта во время сохранения (используя Только ToString () и записывает любые изменения в таблицу аудита.

Редактировать: у меня было свойство [Audit] в каждом свойстве, которое я хотел считать аудируемым, и использовал рефлексию для их поиска, что делало метод не специфичным для объектов аудита.

3 голосов
/ 29 сентября 2008

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

1 голос
/ 30 ноября 2008

Мы внедрили подобное решение, используя AOP (реализация aspectJ). С помощью этой конкретной точки могут быть захвачены и могут быть выполнены определенные операции.

Это можно подключить и отключить, когда захотим.

Если вы действительно хотите сделать это на уровне приложения, я бы предложил это.

Надеюсь, это поможет ..

1 голос
/ 29 сентября 2008

Я получаю больше со стороны ПО, чем со стороны БД, если вы создаете набор DAO (объектов доступа к данным), которые вы используете для взаимодействия с базой данных. Затем я вставил бы функции аудита в соответствующие функции в DAO, которые необходимо отслеживать.

Также возможно решение для триггера базы данных, оно зависит от того, где вы хотите разместить свою функциональность, в БД или в коде

Существует множество инструментов ORM (объектно-реляционное сопоставление), которые создают для вас слой DAO.

0 голосов
/ 23 декабря 2008

Я сделал это в Hibernate (другой ORM), используя перехватчик для сеанса. Таким образом, код аудита отделен от вашего кода.

0 голосов
/ 29 сентября 2008

Я знаю, что это не отвечает на ваш вопрос, но, к сведению, я предпочитаю обрабатывать этот тип логики аудита в базе данных.

...