Аудит доменной модели
От: Alkersan  
Дата: 25.06.09 13:03
Оценка:
В данный момент разрабатываю систему для Human Resources на ASP.NET. Как платформу использую Web Client Software Factory, для доступа к данным — NHibernate. Появилось требование — реализовать историю изменеий объектов домена. Но не просто кто и когда менял последним запись о сотруднике, а детально, какие поля какого объекта, кем, когда менялись. Много перечитал но к решению так и не пришел.
В каком слое лучше реализовать такой функционал, и как приблизительно должно выглядеть такое решение?

Я выделяю 2 сценария: создание business entity и дальнейшее ее редактирование. Допустим удалять в системе ничего нельзя (информация вечная).
В какой момент лучше делать запись в лог? Фаулер описывал подход когда сами объекты в setter свойствах вызывали Логер. Но это как-то коряво, и не логично — доменным объектам должно быть все равно, есть ли аудит или нет.

Может лучше с помощью какого-то атрибута над свойствами? Но тогда куда передавать сообщение о том что я (свойство) изменилось? Какой шаблон лучше для этого использовать?

Кто-то мне предлагал перед апдейтом сравнивать первоначальное состояние объекта с текущим при помощи рефлексии, и список изменений заносить в лог. Но прохоить по дереву полей объекта каждый раз при обновлении — это наверно долго. Хотелось бы чтобы изменения заносились в какое-то хранилище, типа транзакции, именно в момент изменеий, но вот как именно такое организовать?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.