业务数据-自动翻译工具-第一版

背景

因为涉及业务开发,经常遇到一些id需要翻译成名称,例如:“机构id”翻译为“机构名称”,“用户id”翻译为“用户名称”,以及一些业务id需要翻译为业务名称。经常遇到大量的重复代码填写。

常用

List<VoucherWarehouse> list(); 
Paging<VoucherWarehouse> paging();  
List<VoucherDelivery> list();  
Paging<VoucherDelivery> paging();

经常需要把单据的相关操作人、所述机构都需要转换,但是这些内容都是通用的,但是不同的Dto或者方法中,需要特殊处理翻译,这样影响了开发效率和增加了代码的冗余。

第一版

为了解决上述问题,提高团队的开发效率,因此萌发了翻译工具的开发。当时只是简单的考虑通过公共接口,每个Dto实现接口,提供id和设置name方法。

定义接口

public interface OrgTransform{
	/**提供id*/
	public Long transOrgId();
	/**设置name*/
	public void transOrgName(String name);
}

Dto定义

public class VoucherWarehouse implements OrgTransform{
	private Long orgId;
	private String orgName;
	
	public Long transOrgId(){
		return this.orgId;
	}
	public void transOrgName(String name){
		this.setOrgName(name);
	}	
}

定义翻译者

public class OrgTranlator{
	public void tranlate(List<OrgTransform> list){
		if(CollectionUtils.isEmpty(list)){
			return ;
		}
		List<Long> idList = new ArrayList();
		for(OrgTransform form : list){
			if(form.transOrgId()!=null){
				idList.add(form.transOrgId());
			}
		}
		Map<Long,String> orgMap =search(idList);
		for(OrgTransform form : list){
			String orgName = orgMap.get(form.transOrgId());
			if(StringUtils.isNotEmpty(orgName )){
				form.transOrgName(orgName);
			}
		}
	}
	private Map<Long,String> orgSearch(List<Long> idList){
		//查询数据库获取机构信息
		return new HashMap();
	}
}

方法调用

@Autwired
private OrgTranlator orgTranlator ;

List<VoucherWarehouse> list(){
	//查询获取单据
	List<VoucherWarehouse> voucherList = serarchList();
	//手动调用翻译工具。
	orgTranlator.tranlate(voucherList);
}

缺点

  1. 不同的Dto需要实现相同的OrgTransform,代码重复性也有点高。
  2. 如果VoucherWarehouse如果再增加去向单位id,就需要重新定义一个Transform接口,专门处理同一个Dto存在多个相同业务的字段。
  3. 对已有代码有一定的侵入性,使用起来不太简单。

第二版

使用一段时间后,第一版的代码重复率也比较高,同时使用比较繁琐,经过参考其他的代码,针对第一版的3个缺点,确定了AOP+自定义注解+公共代码的抽取(jdk反射),生成了第二版,见:自动翻译工具-第二版

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值