gpt4 book ai didi

.net - 审计日志方法的提示

转载 作者:行者123 更新时间:2023-12-02 04:18:42 24 4
gpt4 key购买 nike

我目前正在开发一个 ASP.NET 人力资源系统。我正在使用基于 MVP 模式的带有 Web 客户端软件工厂的分层架构。 ORM 是 NHibernate。我需要实现一个审计日志模块。我读过很多关于不同方法的文章。他们中的大多数都描述了如何跟踪日期、时间戳和进行更改的人的身份,但没有人能告诉我:如何跟踪我的域层中任何属性的更改?我不需要任何回滚功能,我只需要记录:谁、何时以及什么对象的属性被更改,该属性的旧值和新值。

我无法决定将这些更改的处理程序放在哪里。 Fowler 在属性的 setter 方法中指出了一个审计日志,但我仍然希望我的域类保持简单的 POCO。也许还有其他方法?

最佳答案

几年前我也不得不为人力资源系统做这件事。我完成了它,让我所有的“字段”都实现了一个模板(通用):

这是我修剪的模板示例:

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' 将实现一个返回审计对象的方法。对于字符串、 double 、整数等,它几乎已经融入其中,但如果您使用自定义对象,您可以为它们编写审计实现,只需返回一个审计对象。

因此,在最后的典型形式中,我会将所有数据存储在一个具有所有这些类型字段的对象中。然后我会进行更新并调用 GetAudit 方法,该方法也将写入审计表。

即使他们必须浏览多个页面等,我也可以轻松判断表单中是否有任何更改。

撤消在逐个字段、逐个部分或整个对象级别上非常容易。

由于我很长时间没有接触过代码,所以对确切的细节有点模糊,但这就是它的要点。希望有帮助。

关于.net - 审计日志方法的提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1040626/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com