一个新项目
订单有八个状态,已编制,已派发,已接单,已停单,已出库,已上车,已卸货,已完结
要求我根据每个状态的查询都写一个接口,并且返回的订单信息要过滤,而不是需要什么在set到返回对象中。
这需要我写一个订单基本信息的类orderInfo,然后根据订单流程,不断继承与orderInfo或者orderInfo的子类,除了已停单的类不写以外,总共有8个类;每次继承的时候根据状态新增几个需要的变量,然后在查询的时候讲order对象copy到指定的orderInfo中,以完成筛选。
例如
public class OrderDispatchedInfo extends OrderCompiledInfo {
private String driverId;
private String goodsName;
private String goodsWeight;
private String driverName;
private String driverTelephone;
但是到之后根据业务需要,我需要关联货物和司机表获得一些参数返回到前端。
//对象拷贝
BeanUtils.copyProperties(ctmsOrder, orderInfo);
//参数包装begin
.....
.....
...
//参数包装end
在参数包装这包括try catch 大概有20多行代码,我要写根据7个状态的列表查询,这就大概多了140行代码,而且鬼知道之后还会不会需要别的信息。不过
等项目开发阶段基本完成的时候,我就想起了重构这段代码。一开始我只是简单的将以上代码抽离出来写了一个私有方法。但是测试的时候发现在查询已完成的订单时很多信息没有。
private Object getOrderInfo(CtmsOrder ctmsOrder, OrderDispatchedInfo orderInfo) {
BeanUtils.copyProperties(ctmsOrder, orderInfo);
....
>
....
....
return orderInfo;
}
这时候才发现,我在拷贝对象的时候,目标对象因为是继承级别为已派发的参数,很多字段例如评价信息是拷贝不到目标对象的。
之后决定这个抽离出来的类只将其他表信息包装,对象拷贝在原方法完成,不过是在包装参数之后的动作
OrderReceivedInfo orderInfo = new OrderReceivedInfo();
orderInfo = (OrderReceivedInfo) getOrderInfo(ctmsOrder, orderInfo);
BeanUtils.copyProperties(ctmsOrder, orderInfo);
orderInfoList.add(orderInfo);