我目前正在开发一个ASP.NET的人力资源体系。我使用的是Web客户端软件工厂,这是基于MVP模式分层架构。 ORM是NHibernate的。我需要执行审核日志模块。我读过很多关于不同的方法。他们中的大多数描述了如何跟踪日期,timastamp和谁做这种改变的人的身份,但没有人能告诉我一个:如何跟踪我的领域层的任何性质的变化?我不需要任何回滚功能,我只需要登录与:谁,什么时候,什么财产什么对象的改变,旧值和该属性的新值

我不能决定从哪里把这个变化的处理程序。福勒在属性setter方法指出审计日志,但我仍想保留我的领域类的简单POCO`s。也许有一些其他的方法呢?

有帮助吗?

解决方案

我不得不这样做了几年回来的HR系统也是如此。我完成有我所有的“域”实现的模板(通用)是:

下面是模板我发下调的示例:

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;
    }
}

关于它的有趣的部分是由auditting容易的是,每一个对象可能产生它自己的审计日志。我可能会采取可能有这些“领域” X号和调用其GetAudit任何对象,它会返回我的审计对象的所有更改显示的字段名称,老VAL,新VAL等等。每个类“数据字段”将实施返回审计对象的方法。对于字符串,双,整数等它非常烤,但如果你使用自定义的对象,你可以为他们写了审计的实现,刚刚返回一个审核对象。

因此,在在端部具有典型形式I将具有存储在该有所有这些类型的字段中的一个对象中的所有数据。然后我会做的更新,并调用它也将被写入一个审核表以及所述GetAudit方法。

我可以很容易地分辨什么形式发生了变化,即使他们不得不通过多页等等。

撤消的是在一个场很容易由字段,逐节或整个对象电平为好。

这是因为我还没有触及该代码在很长一段时间,但是,这是它的要点的具体细节雾蒙蒙小。希望帮助。

其他提示

也许你可以实现观察者模式,但是,由于.NET隐含实现了这个模式(与事件)我想不会有太多的附加价值。

也许你可以保存“原单” objetcs而当时间是正确的他们与修改后的比较对象(可能使用反射),并找出哪些特性发生了改变,以及他们的新值。 但是,请注意,你不能在.NET对象的deepcopies(除非你可以序列化的对象),所以记住这一点对于这个解决方案

无论您需要在您的对象周围保留原始数据或更新之前从数据库中拉了记录。

我已经看到了这个在数据层中实现,或者在存储过程或触发器,但从来没有在域中层。

编辑:使用数据库的A 2部例如触发登录历史这里找到: http://www.4guysfromrolla.com/webtech/041807-1.shtml 似乎有很多很好的讨论对这一技术的优点/缺点。我希望帮助。

你检查出记录应用程序块微软的企业库?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top