防腐层是在DDD是占有非常重要的作用,具体分析可以见这篇文章,这里就不细说了,但是在Java代码中防腐层应该怎么设计呢?目前比较好的有以下几种。
- 通过cglib的BeanCopier。
- 通过Spring的BeanUtils。
- 通过mapstruct。
- 硬编码。
下面分别通过例子来看下优缺点,最后做个选择,现在有两个对象,一个是OriginOrder,一个是TargetOrder,需要把OriginOrder转化为TargetOrder。
cglib的BeanCopier
代码如下:
public class CglibBeanCopierConvertor {
private static final BeanCopier copier = BeanCopier.create(OriginalOrder.class, TargetOrder.class, false);
public static TargetOrder convert(OriginalOrder originalOrder) {
TargetOrder targetOrder = new TargetOrder();
copier.copy(originalOrder, targetOrder, null);
return targetOrder;
}
}
cglib的实现原理见文章
Spring的BeanUtils
代码如下:
public class SpringBeanUtilConvertor {
public static TargetOrder convert(OriginalOrder originalOrder){
TargetOrder targetOrder = new TargetOrder();
BeanUtils.copyProperties(originalOrder, targetOrder);
return targetOrder;
}
}
原理如下: https://blog.youkuaiyun.com/sosozha/article/details/80710174
mapstruct
代码如下:
@Mapper
public interface MapStructConvertor {
MapStructConvertor CONVERTOR = Mappers.getMapper(MapStructConvertor.class);
@Mappings({
})
TargetOrder convert(OriginalOrder originalOrder);
}
原理如下: https://juejin.cn/post/6844904199755415559
硬编码的方式
public class HardCodeConvertor {
public static TargetOrder convert(OriginalOrder originOrder){
if (originOrder == null){
return null;
}
TargetOrder targetOrder = new TargetOrder