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