joh*_*ohn 9 java enums constructor
我有一个客户端库,我在其中对我的休息服务进行http远程调用,然后我返回List<DataResponse>给调用我们的库的客户,我从REST服务获取响应以及任何错误,如果有任何包装DataResponse对象周围.
public class DataResponse {
private final String response;
private final boolean isLink;
private final TypeOfId idType;
private final long ctime;
private final long lmd;
private final String maskInfo;
// below are for error stuff
private final ErrorCode error;
private final StatusCode status;
// constructors and getters here
}
Run Code Online (Sandbox Code Playgroud)
这是我的ErrorCode枚举类:
public enum ErrorCode {
// enum values
private final int code;
private final String status;
private final String description;
// constructors and getters
}
Run Code Online (Sandbox Code Playgroud)
这是我的StatusCode枚举类:
public enum StatusCode {
SUCCESS, FAILURE;
}
Run Code Online (Sandbox Code Playgroud)
正如你在我的DataResponse班级中看到的那样,我有很多字段,所以我有一个非常长的构造函数,每次当我创建一个DataResponse对象时,我都有一个大的new DataResponse(.......).将来我可能会有更多的领域但是现在我只有这些领域.
有没有更好的方法可以用来制作一个DataResponse对象然后List<DataResponse>从我的库中返回?
Vin*_*igh 23
不要立即使用构建器模式.它不适用于包含大量必填字段的类型.它适用于包含大量可选字段的类型.
通过构造函数指定构建器的必需属性.您不必使用方法定义值,这使得这些值是可选的.
这样,您的对象只能部分构建.使用构建器可能会滥用设计.
话虽如此,你应该分解你的类型.我不确定是什么lmd或者ctime是什么,或者真的DataResponse应该代表什么,所以我不能告诉你应该以哪种方式分解.但我可以告诉你凝聚力决定了这一点.
isLink,maskInfo并idType可能被分解为一个DataResponseDetails对象:
class DataResponseDetails {
private boolean isLink;
private String maskInfo;
private TypeOfId idType;
public DataResponseDetails(boolean isLink, String maskInfo, TypeOfId idType) {
//...
}
}
Run Code Online (Sandbox Code Playgroud)
现在你DataResponse可以组成DataResponseDetails:
class DataResponse {
private DataResponseDetails details;
private String response;
//...
public DataResponse(DataResponseDetails details, String response, ...) {
//...
}
}
Run Code Online (Sandbox Code Playgroud)
感觉你的构造函数需要太多了吗?分解更多!
| 归档时间: |
|
| 查看次数: |
2936 次 |
| 最近记录: |