【问题标题】:Audit fields for AppEngine entitiesAppEngine 实体的审核字段
【发布时间】:2012-03-31 02:40:44
【问题描述】:

寻找有效的方法来维护 AppEngine for Java 中实体的基本审计字段的建议(通过 objectify)。 @PrePersist 属性对于各种日期字段(dateCreated、dateModified、dateDeleted)看起来是一个不错的选择,但我还希望存储创建、修改、删除实体的用户的 ID。这最好留给数据访问层吗?

【问题讨论】:

    标签: java google-app-engine objectify


    【解决方案1】:

    如果您需要存储的记录不仅仅是您提到的日期,您可能需要创建一个审计对象并使用@Embed 将其存储在您正在审计的对象中。然后使用@PrePersist 更新这个对象。这将为您提供跨对象的一致审计框架。

    【讨论】:

    • 如果我使用 \@PrePersist,我如何获取用户 ID?我们必须访问它的唯一方法是通过从 HttpSession 中获取它的用户检索服务。将某种服务注入域实体以获取此信息是常见的做法吗?
    • 是的。您可以从会话中获取它,也可以从 cookie 中读取它。这完全取决于您的应用程序。通常,您的应用程序的 DAO 层会有一个类似 doUpdate(User, Entity) 的方法
    • 我们有一个 DAO 层,但我不确定我是否喜欢必须将用户传递给每个 doUpdate 方法的想法。 DAO 层不应该本质上知道如何做到这一点吗?
    • 如果你这样写......但它必须从某个地方获取用户,在这种情况下是一个 httpsession 或你传入的变量。你可以将与用户的会话附加到一个线程本地对象并根据需要以这种方式获取它,但这取决于您自己的管理。
    • 别忘了,“用户”是你发明的。 Objectify 没有“用户”的概念,objectify 4 甚至没有 dao 对象。所以说“dao层不应该天生就知道怎么做”是有缺陷的。
    【解决方案2】:

    恕我直言@PrePersist 是执行此操作的好地方。

    您可能还想使用objectify's polymorphism - 这样您就可以拥有一个包含所有审计字段的基类并执行保存。比所有需要审计的类都只扩展这个基类。

    【讨论】:

      猜你喜欢
      • 2017-04-03
      • 2022-06-30
      • 2019-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-10
      • 1970-01-01
      相关资源
      最近更新 更多