Noark入门之转化器

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

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

来看一下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在扫荡奖励用分号,程序观点反正坑得是数值,数值观点反正出了问题找程序,一直在相互伤害中成长

转载于:https://my.oschina.net/xiaoe/blog/2054622

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值