实践中的重构31_结果类两种实现的比较
在查询接口结果类设计中,有这么一种思路,即把查询的真实结果和结果码组合起来,形成一个结果类,当调用方使用该接口时,先判断结果是否是成功结果,然后进行相应的处理。
一个示例如下:
/** * 列表查询结果。 * <p> * 请在处理成功时[ isSuccess() == true; ]才使用查询结果对象。 * </p> * */public class QueryListResult {private List<Book> resultObject;private ResultCode resultCode;public QueryListResult() {}public QueryListResult(ResultCode resultCode) {this.resultCode = resultCode;this.resultObject = null;}public QueryListResult(ResultCode resultCode, List<Book> bookList) {this.resultCode = resultCode;this.resultObject = bookList;}public boolean isSuccess() {return ResultCode.SUCCESS == resultCode;}public List<Book> getResultObject() {return resultObject;}public void setResultObject(List<Book> bookList) {this.resultObject = bookList;}public ResultCode getResultCode() {return resultCode;}public void setResultCode(ResultCode resultCode) {this.resultCode = resultCode;}}
/** * 列表查询结果。 * <p> * 请在处理成功时[ isSuccess() == true; ]才使用查询结果对象。 * </p> * */public class QueryListResult {private List<Book> resultObject;private ResultCode resultCode = ResultCode.UNKNOWN_EXCEPTION;public QueryListResult() {}public static QueryListResult createFailedResult(ResultCode resultCode) {QueryListResult failedResult = new QueryListResult();if (resultCode != ResultCode.SUCCESS && resultCode != null) {failedResult.resultCode = resultCode;}return failedResult;}public static QueryListResult createSuccessfulResult(List<Book> bookList) {QueryListResult successfulResult = new QueryListResult();successfulResult.resultCode = ResultCode.SUCCESS;if (bookList == null) {successfulResult.resultObject = new ArrayList<Book>();} else {successfulResult.resultObject = bookList;}return successfulResult;}public boolean isSuccess() {return ResultCode.SUCCESS == resultCode;}public List<Book> getResultObject() {return resultObject;}public void setResultObject(List<Book> bookList) {this.resultObject = bookList;}public ResultCode getResultCode() {return resultCode;}public void setResultCode(ResultCode resultCode) {this.resultCode = resultCode;}}