gpt4 book ai didi

java设计-哪个类存储应用程序范围的对象?

转载 作者:太空宇宙 更新时间:2023-11-04 11:15:08 26 4
gpt4 key购买 nike

我有一个在应用程序运行时获取的Server对象,我需要在应用程序运行期间保留它。它只是一个带有 id 和主机名的模型对象。

从良好的软件设计和关注点分离的角度来看,对象将存储在哪里以及如何访问它?

让我提供一些代码。

public interface ServerDao{
Server findByHost(String host);
}

这就是我从 DAO 获取对象的方式。实现无关紧要。

现在假设我想要一个名为 getCurrentServer 的方法,该方法可以在整个应用程序中调用,并且它获取属于正在运行应用程序的计算机的 Server 对象(基于主机名)。

public Server getCurrentServer() {
ServerDao dao = // some way to get it
try {
return dao.findByHost(InetAddress.getLocalHost().getHostName());
} catch (UnknownHostException e) {
LOGGER.error("Host not found", e);
}
return null;
}

将其放入 ServerDao 类中可能不是一个好主意。将其放入我的 Application 类中可能是个坏主意。

我应该在哪里放置这样的方法?我应该创建一个带有 Server 单例的 ServerContext 类吗?标准方法是什么?

谢谢。

最佳答案

您有一个当前服务器。需要认识到的重要一点是 CurrentServer 是一个选择,并且该选择由一个更新并在整个应用程序状态之间共享。

如果您希望在应用程序运行之间保持这种状态,您可能需要一个带有显式存储的 CurrentServer DAO。然后每个组件都可以选择 CurrentServer 并可能更新它。

这意味着数据库中需要一个只能有一个值的主键。主键列 current 的数据类型为 boolean 值,其他人选择的值为 True 应该可以解决问题。

现在您可以拥有数据的多个实例,但这些实例可能会变得过时。这比单例方法最终导致的争用更容易解释(并且更可扩展)。

public CurrentServer getCurrentServer() {
CurrentServerDao dao = new CurrentServerDaoImpl(new DefaultDatabaseService());
try {
return dao.findByCurrent(Boolean.TRUE);
} catch (UnknownHostException e) {
LOGGER.error("Host not found", e);
}
return null;
}

关于java设计-哪个类存储应用程序范围的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45538106/

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