我目前正在使用NHibernate开发ASP.NET MVC项目,我需要跟踪一些实体的变化,以便能够对数据进行一些报告和查询。出于这个原因,我希望将数据放在表中,但我试图决定在哪里“挂钩”审计代码。把审计或日志记录放在哪里?
在NHibernate的层:
- PRO:强大的事件系统来跟踪任何变化
- PRO:没有任何东西可以在应用程序中进行更改,恕不另行通知(除非有人使用原始SQL ...)
- CON:因为我有一个通用的存储库...那么我必须过滤出有用的实体(我不需要跟踪所有内容)。
- CON:我无法轻松访问控制器和操作,因此我只能跟踪基本操作(更新,删除...)。我至少可以获取HttpContext来获取一些信息。
论控制器级别的行为过滤器:
- PRO:在请求和Web应用程序状态的全部信息。通过这种方式,我可以将“编辑”与“状态更改”区分开来,并在审计信息中更具描述性。
- CON:有人可以忘记过滤器,可以在不通知的情况下采取重要措施,这是一个很大的挑战。
任何线索?
更新:请参阅如何Create an Audit Log using NHibernate Events。
第四种方法是让控制器提供描述数据库操作的强制性“注释”参数。 – 2009-04-16 12:16:34