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

时间:2017-08-07 01:03:45

标签: java

我有一个Server对象,它是在应用程序运行时获得的,我需要在应用程序的持续时间内保留它。它只是一个带有id和hostname的模型对象。

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

让我提供一些代码。

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课程可能是一个坏主意。

我会在哪里放置这样的方法?我应该创建一个ServerContext类,其中包含Server的单例吗?什么是标准方法?

感谢。

1 个答案:

答案 0 :(得分:0)

你有一台CurrentServer。要实现的重要一点是,CurrentServer是一个选择,并且该选择由一个更新并在整个应用程序状态中共享。

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

这意味着您需要数据库中只能有一个值的主键。数据类型为布尔值的主键列current,其他人选择的值为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;
}