gpt4 book ai didi

java - 监听某些变化并将其更新到数据库

转载 作者:行者123 更新时间:2023-11-30 06:29:57 27 4
gpt4 key购买 nike

所以我正在开发一个使用 mongodb/morphia 的软件,我需要一种方法来监听该对象以检查某个值何时更改以在数据库中更新它,而不是手动执行。

最好的方法是什么?观察者模式?

所以我有 3 个类:User(父类(super class))、GlobalPlayer 和我的 Main。我知道我需要使用观察者模式,但我在实现时遇到了问题。

用户类别: User Class

GlobalPlayer 类: GlobalPlayer Class

主要类别: enter image description here

正如您在我的主类中看到的那样,即使 GlobalPlayer 没有任何新的更新,我也会每 5 秒更新一次,那么我如何在其中实现观察者模式呢?

最佳答案

使用脏标志。

使用观察者模式,您可以跟踪每个变化。但是您真的想在每次进行一点更改时都保存每个用户吗?可能不会,所以当使用观察者时,您可能还想构建一些通过延迟写入来防止数据库负载过高的东西。另外,我总是尝试保持我的数据对象简单,连接松散,因为这会降低复杂性。因此,我的猜测是观察者模式太过分了,并且使它变得比需要的更加复杂。只需使用脏位和计划任务来定期保存每个用户。系统崩溃时负载不大,只有少量数据丢失。

public class User {

@Transient
boolean dirty;

private void markDirty() {
dirty = true;
}

public void isDirty {
return dirty();
}

每个setter 应该首先调用markDirty() 方法。像这样:

public void addCoins(long coins) {
markDirty();
this.coins += coins;
}

在 Global 中,我们仅在用户脏了时才保存他/她/它/其他人:

if (gp.isDirty()) {
getPlayerManager().update(gp);
}

更好的设计会将 if(gp.isDirty()) 移动到 PlayerManager 类的 update 中,因为它应该是 Playermanager 的责任保存。

关于java - 监听某些变化并将其更新到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46384613/

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