我目前正在使用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