我的数据库中已有大量现有数据,我想开发一种积分机制,根据每个用户的操作为他们计算分数。
我以可插入的方式实现此功能,因此它独立于主要逻辑,并依赖于在实体被修改后发送的 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/