在之前,我们编写的模板类文件时,总有个子类继承模板类,来重解析父类的字符串配置奖励…

当项目功能越做越多时,这种很恶心的解析一次又一次的复制很是讨厌,多人之间写法又不完全一致,导致后期维护很头大…

来看一下Noark提供的转化器带来的新感受

比如副本通关奖励配置格式如下

道具编号:数量,道具编号:数量,道具编号:数量

编码SimpleItem.java

public class SimpleItem {
	private String id;
	private int num;
	//省略GetSet方法...
}

编码SimpleItemList.java

public class SimpleItemList {
	private List<SimpleItem> items;
	//省略GetSet方法...
}

副本模板类添加SimpleItemList注入

@TplAttr(name = "Items")
private SimpleItemList items;

是不是很像模板注入中的IntList,没错就是这样简单方便,但是这还不能正常工作…

每一个成功运作的背后都有一个类型转化器在默默的为他解析构建生成注入…

编写SimpleItemListConverter.java

@TemplateConverter(SimpleItemList.class)
public class SimpleItemListConverter extends AbstractConverter<SimpleItemList> {

	@Override
	public SimpleItemList convert(String value) throws Exception {
		SimpleItemList result = new SimpleItemList();
		if (StringUtils.isNotEmpty(value)) {
			String[] items = StringUtils.split(value, ",");
			List<SimpleItem> itemList = new ArrayList<>(items.length);
			for (String item : items) {
				String[] args = StringUtils.split(item, ":");
				itemList.add(new SimpleItem(args[0], Integer.parseInt(args[1])));
			}
			result.setItems(itemList);
		} else {
			result.setItems(Collections.emptyList());
		}
		return result;
	}

	@Override
	public String buildErrorMsg() {
		return "道具编号:数量,道具编号:数量,道具编号:数量";
	}
}

需求又来了,如果策划说副本扫荡奖励也跟这个长一样,是不是还要写个类再写个转化器呢?

如果是配置格式长得一样,那就直接用嘛

@TplAttr(name = "SweepReward")
private SimpleItemList sweepReward;

只要编写一次,到处转化…

研发中,有了转化器的存在,整体性福感满满的,因为再也不会有相同功能的配置长两种格式,数值大爷都爱你了…

想当年啊,策划A设计通关奖励是用逗号,策划B在扫荡奖励用分号,程序观点反正坑得是数值,数值观点反正出了问题找程序,一直在相互伤害中成长

转载请注明原地址: http://blog.noark.xyz/article/2018/9/17/noark入门之转化器/