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

标签 java

我有一个在应用程序运行时获取的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/

相关文章:

java - Spring MVC Controller 预处理请求体

java - 字符串数组反转Java

java - 如何使用不同的输入对象映射到同一业务对象?

java - JTextfield 默认操作后 JButton 变为启用

java - OpenGL 顶点数组和 GL_TRIANGLE_STRIP 绘图错误

java - diffie hellman 加密公钥给出错误的值

java - 如何在 spring 中将图像转换为多部分文件

java - Jxls 或杰特 : How to render a tree with formulas on parent nodes?

java - 无法使用自定义适配器单击 listview android

java - 使用Mysql从数据库中检索时间戳数据