【发布时间】:2012-02-26 02:57:06
【问题描述】:
我需要进行某种审核。我们希望存储插入、更新、删除或打开记录的时间。
现在我已经在 Singleton 类上创建了一个简单的方法:
public void Audit(string audit, AuditTypes type)
{
AuditEntry = new AuditEntry(){ Audit = audit, TypeId = (int)type };
// some logic to commit the audit entry to the database
}
public enum AuditTypes
{
Insert = 1,
Update = 2,
Delete = 3
Open = 4
}
在表单中的某个地方我称之为这个方法:
MyForm.cs:
private void RemoveSomeObject(SomeObject myObject)
{
/* Do some stuff that removes the object*/
MySingleton.GetInstance().Audit(myObject.Title, AuditTypes.Delete)
}
出于某种原因,我不认为这是要走的路,因为在代码中的任何地方都使用这种方法,我有这种行。
我认为以更面向对象的方式来做更聪明,你觉得呢? 编辑:
我确实记录了用户 ID 和日期,但我发现它与通知无关。
【问题讨论】:
-
我不知道这是否适合您,但过去我曾研究过使用插入/更新/删除触发器对 table进行审计的系统>_审计表的版本。
-
哪个 RDBMS?审核数据更改真的属于数据库...
-
他甚至没有提到数据库,为什么要假设涉及数据库?据我们所知,它可能是 Twitter 垃圾邮件机器人。
-
虽然您当然可以审核在数据库级别发生了哪些更改,但在数据库级别进行更改时审核谁进行了更改则更加麻烦。当您拥有一个 Web 应用程序时,大多数情况下,该 Web 应用程序的所有用户都在一个用户帐户下访问数据库,但您真正想要跟踪的是应用程序级别(而不是数据库)的哪个用户进行了更改。除非访问数据库的唯一方法是通过需要传递应用程序用户凭据的存储过程,否则这只能在应用程序级别完成。
-
@Yuck 我们使用的是 MS SQL Server 2005 及更高版本
标签: c# design-patterns audit-logging