我有一个客户端库,我在其中对我的休息服务进行http远程调用,然后我返回List
给调用我们的库的客户,我从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 }
这是我的ErrorCode
枚举类:
public enum ErrorCode { // enum values private final int code; private final String status; private final String description; // constructors and getters }
这是我的StatusCode
枚举类:
public enum StatusCode { SUCCESS, FAILURE; }
正如你在我的DataResponse
班级中看到的那样,我有很多字段,所以我有一个非常长的构造函数,每次当我创建一个DataResponse
对象时,我都有一个大的new DataResponse(.......)
.将来我可能会有更多的领域但是现在我只有这些领域.
有没有更好的方法可以用来制作一个DataResponse
对象然后List
从我的库中返回?
不要立即使用构建器模式.它不适用于包含大量必填字段的类型.它适用于包含大量可选字段的类型.
通过构造函数指定构建器的必需属性.您不必使用方法定义值,这使得这些值是可选的.
这样,您的对象只能部分构建.使用构建器可能会滥用设计.
话虽如此,你应该分解你的类型.我不确定是什么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) { //... } }
现在你DataResponse
可以组成DataResponseDetails
:
class DataResponse { private DataResponseDetails details; private String response; //... public DataResponse(DataResponseDetails details, String response, ...) { //... } }
感觉你的构造函数需要太多了吗?分解更多!