java - 在 Spring 中设计积分系统

标签 java spring hibernate achievements

我的数据库中已有大量现有数据,我想开发一种积分机制,根据每个用户的操作为他们计算分数。

我以可插入的方式实现此功能,因此它独立于主要逻辑,并依赖于在实体被修改后发送的 Spring 事件。

问题是如何处理现有数据。我不想从现在开始收集积分,而是包括直到现在的所有数据。

最实用的方法是什么?我是否应该以提供 index() 方法的方式设计我的插件,这将强制我的系统从数据库中获取每个实体,发送一个 EntityDirtyEvent,为每个实体触发点插件,然后更新它,让点被保存在每个实体旁边。这可能会导致大量开销,对吧?

最简单的事情是创建一个复杂的存储过程,然后让 index() 调用该存储过程。然而,在我看来这也是一件坏事。既然我无论如何都要在java中编写计算点的逻辑,为什么又要在SQL中呢?此外,总的来说,我不喜欢将业务逻辑拆分到不同的层。

有人做过吗?请帮忙。

最佳答案

首先让我们区分实现策略和业务规则。

由于您已经拥有数据,请考虑直接从数据中获取结果。这形成了数据域模型。设计数据模型以存储所有数据。然后,创建一组查询、 View 和存储过程来访问和更新数据。

获得这些 View 后,使用数据访问库(如 Spring JDBC 模板)获取此数据并将它们表示为 java 对象(列表、 map 、人员、点表等)。

无论系统的上层发生什么,到目前为止你已经完成的事情并没有太大变化。这称为模型。

然后,开发一个规则库或逻辑实现,确定在什么输入、用户操作、数据条件下或对于所有其他条件,需要什么数据。在数学意义上,这就像一个矩阵。在编程意义上,这将是一组逻辑语句。如果这个、这个和这个是真的,那么获取这个数据,否则获取那个数据,等等。这包含了你系统中的逻辑。因此它被称为“ Controller ”。

不要将此逻辑移动到查询/存储过程/ View 中。

然后最终为此开发一个前端或“控制台”。在最简单的情况下,开发一个控制台输入系统,它接受一个 .. 并显示一组结果。这是您对系统的“看法”。

您最终可以将 View 开发成 Web 应用程序。上述命令行 View 仍然可以以 Restful API 服务器的形式存在。

关于java - 在 Spring 中设计积分系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11691367/

相关文章:

java - Spring Boot 中的继承 : @Autowired fields are null (need autowiring in non spring managed class - multiple instances)

java - 将 HTTP 方法添加到 Spring HATEOAS 链接

java - 使用 Hibernate 保存大量记录时内存不足?

java - 多对多映射不起作用,一侧设置为反向

performance - 是否可以查看/优化 Hibernate 查询计划?

java - 当我单击文本字段并弹出时,是否有 Java Swing 的日期选择器?

java - 锁定文件并在不先释放锁定的情况下将其删除

java - Spring 数据和 hibernate 比存储过程更快

java - 由: NoSuchBeanDefinitionException: No qualifying bean of type xxx expected at least 1 bean which qualifies as autowire candidate引起

java - S4 启动 PE 时数组索引越界