【发布时间】:2019-12-17 20:56:23
【问题描述】:
我目前正在为我的一个程序开发一个库。在内部,库本身通过套接字连接到服务器。目前,目标主机和端口等套接字设置是通过 IConnection 配置的,这是我想为 lib 用户提供的两个类之一:
public interface IConnection {
public void connect(String hostname, int port); //lib connects to a server internally
public void disconnect();
}
一旦通过 IConnection 建立到服务器的连接,就可以通过库的第二个接口 IRequestor 触发请求:
public interface IRequestor {
public String processRequest(String request);
}
我看不出这种设计有什么大的缺点,但是,有两件事困扰着我:
库假定用户了解发生前的关系,这意味着用户首先必须通过 IConnection 建立连接才能使用库的主要功能,即通过以下方式触发请求请求者。 只要我提供完整的文档,这是否可以接受,或者是否有更好的设计解决方案可以自动强制执行之前发生的关系?
-
套接字在整个库中用作字段。当用户断开连接并重新连接到不同的服务器时,许多类的状态会发生变化(它们现在请求不同的服务器)。因此,突然间,这些类向不同的服务器发出请求,并且很难推断出“套接字连接”的更改对象、地点和时间(因为套接字作为字段并通过内存“交换”,而不是方法传递)。 当然,我总是可以通过 IRequestor 指定服务器,但这似乎也不对,例如
processRequest(String request, String hostname, int port)
【问题讨论】:
标签: java design-patterns architecture