几年前我也不得不为人力资源系统做这件事。我完成了它,让我所有的“字段”都实现了一个模板(通用):
这是我修剪的模板示例:
class DataField<T>
{
public T Current { get; set; }
public T Original { get; set; }
// stores the field name as a nice textual readable representation.
// would default to property name if not defined.
public string FieldName { get; set; }
public bool Modified
{
get { return !(Current.Equals(Original));
}
public DataField(T value)
{
Original = Current = value;
}
public DataField(T value, T fieldName)
{
Original = Current = value;
FieldName = fieldName;
}
}
使审计变得容易的有趣部分是每个对象都可以生成自己的审计日志。我可以获取任何可能具有 x 个这些“字段”的对象并在其上调用 GetAudit,它会返回一个审核对象,其中包含对显示字段名称、旧 val、新 val 等的类的所有更改。每个'DataField' 将实现一个返回审计对象的方法。对于字符串、双精度、整数等,它几乎已经融入其中,但如果您使用自定义对象,您可以为它们编写审计实现,只需要返回一个审计对象。
因此,在最后的典型形式中,我会将所有数据存储在一个具有所有这些类型字段的对象中。然后我会进行更新并调用 GetAudit 方法,该方法也将写入审计表。
即使他们必须浏览多个页面等,我也可以轻松判断表单中是否有任何更改。
撤消在逐个字段、逐个部分或整个对象级别上非常容易。
由于我很长时间没有接触过代码,所以对确切的细节有点模糊,但这就是它的要点。希望有帮助。