java - 针对某些操作创建用户事件。推荐的解决方案是什么?

标签 java hibernate design-patterns grails aop

这个问题涉及如何在某些系统或用户触发的事件上有效地创建和持久化事件域对象,这些事件本身可能会也可能不会持久化对数据库的更改。

我正在创建一个系统,用户可以在其中标记某个对象,当标记发生时,我应该创建一个 UserTagEvent 来保存被标记的对象、应用或删除的标签以及用户标记了该对象。 (编辑:这不是实际的标签对象,只是标记事件的日志)

这样的可标记对象的关系是一对多的(一个可标记对象有多个标签)

据我所知,我有三种选择。

  1. Controller /服务中执行标记的内联代码(不想这样做,因为它混合了两个不同的业务流程。)
  2. 使用 hibernate 监听器 pre-collection-update 和 post-collection-update 来获取必要的信息并创建并保留新的 UserTagEvent
  3. 使用 AOP。

我还有其他选择吗?有人做过类似的事情吗?你们觉得我应该做什么?如有任何帮助,我们将不胜感激。

最佳答案

并不能 100% 清楚 UserTagEvent 是否代表实际标签,或者它是否仅充当标签事件的日志。

Use hibernate listeners pre-collection-update and post-collection-update to fetch the necessary information and create and persist a new UserTagEvent

如果 UserTagEvent 是您的标签,则 hibernate 监听器没有多大意义,因为只有当您创建 UserTagEvent 并将其添加到自己的对象时,它们才会被触发,然后您将一无所获。

Inline code in the controller/service which does the tagging (don't wanna do this as it mixes two different business processes.)

我首先创建一个负责标记/标签记录的 TagService。您可以从 Controller 使用它,也可以从 aop 使用它,但您应该封装如下功能: tagService.createTag(tag, object, user)

这可能很方便,尤其是当您稍后想要使用不同的技术来存储事件(例如某些 nosql 解决方案)时。

关于java - 针对某些操作创建用户事件。推荐的解决方案是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6167022/

相关文章:

java - ch.qos.logback.classic 和 slf4j-log4j12

java - org.hibernate.Session.save() 到底是做什么的?

java - 使用 Flyway 在 Quarkus 上进行响应式 hibernate

java - Hibernate 4.3.0.Final 获取 session

java - 我们可以访问或查询 Java 字符串实习生(常量)池吗?

java - spring中有没有内置的方法来编写空/空检查方法?

java - 对象序列化查询和类路径

c# - 依赖属性是否实现享元模式?

oop - 这是一个贫血的领域模型吗?

c# - 为什么同一设计会得到两种不同的结果?