【发布时间】:2014-01-28 20:57:58
【问题描述】:
下面是我的界面 -
public interface IDBClient {
public String read(ClientInput input);
}
这是我的接口实现 -
public class DatabaseClient implements IDBClient {
@Override
public String read(ClientInput input) {
}
}
现在我有一个工厂,它可以像这样获取DatabaseClient 的实例 -
IDBClient client = DatabaseClientFactory.getInstance();
....
现在我需要调用我的DatabaseClient 的read 方法,它接受ClientInput 参数,下面是相同的类。这门课不是我写的,所以这就是我对此有疑问的原因,我很确定这是错误的做法。
public final class ClientInput {
private Long userid;
private Long clientid;
private Long timeout_ms = 20L;
private boolean debug;
private Map<String, String> parameterMap;
public ClientInput(Long userid, Long clientid, Map<String, String> parameterMap, Long timeout_ms, boolean debug) {
this.userid = userid;
this.clientid = clientid;
this.parameterMap = parameterMap;
this.timeout_ms = timeout_ms;
this.debug = debug;
}
}
所以当客户调用DatabaseClient的read方法时,他们会像这样创建ClientInput参数,然后使用工厂获取DatabaseClient的Instance,然后相应地调用read方法。
Map<String, String> paramMap = new HashMap<String, String>();
paramMap.put("attribute", "segmentation");
ClientInput input = new ClientInput(109739281L, 20L, paramMap, 1000L, true);
IDBClient client = DatabaseClientFactory.getInstance();
client.read(input);
问题陈述:-
- 所以我的第一个问题是
userid、clientid、timeout_ms应该是Long对象还是只是long类中的long? - 我的第二个问题是,客户可能会传递错误信息,例如
negative user ids、negative client id、negative timeout值等。那么我应该在哪里进行此验证?我应该在ClientInput类的构造函数中还是在其他地方进行此验证检查?执行此操作的更好方法是什么?我应该如何进行验证?
【问题讨论】:
-
您提出了两个截然不同的问题。您应该发布两个单独的帖子,因为 Stackoverflow 并不是一个讨论组。我很确定你会发现这两个问题都被问过很多次,也被回答过很多次。在第一个问题上,搜索何时使用对象以及何时使用原语。对于第二个问题,搜索参数/参数的验证。
标签: java map constructor