Jla框架介绍(四) 配置管理模式

本文介绍了一种简单易用的配置管理机制,使得代码单元能够方便地读取配置,并保持良好的移植性和独立性。通过特定的方法,可以在任意位置对任意代码单元进行统一配置。

    今天轮到分享这个框架的配置管理机制,一般来讲,每个代码单元都可能允许通过配置参数来实现定制化的界面和功能,如果没有配置,一般是很难将一个代码单元直接移植到另一个应用里面去使用,这一章,我简单的分享一下我为Jla框架设计的配置机制。

    配置机制需要实现在任意地方,对任意的代码单元进行统一的配置,而代码单元在读取这个配置的时候,按照统一的标准去读取,而不应该该配置是由哪个代码单元设置的,这就是配置机制的设计思路,进一步将代码单元和应用本身分离开来。

 

    我设计的配置机制非常简单,对代码单元来讲,只需要这样使用即可读取配置:

 1 Jla.require("Js.Config",2,function(Config)
 2 {
 3     function App()
 4     {
 5         var num1=Config.get(App,"configItem1",5);
 6         var str1=Config.get(App,"configItem2");
 7         alert(str1);
 8     }
 9     Jla.set("Test.ClassA");
10 })

 

    这个程序简单的读取了自己的两项配置,Js.Config的get方法有三个参数:

        a.参数1是类的本身或者命名空间字符串,在读取的时候,建议使用类本身,这样就可以和类的命名空间无关了

        b.参数2是类的配置项名称,因为一个类可能有多项配置,这儿可以指定读取哪一项配置

        c.参数3是在指定的配置没有被设置时的默认值,如果没有配置该项,则会直接返回该值

     在任何时候需要写入配置的时候,也非常简单,按照上面的方式调用Js.set方法即可,不过因为在设置配置的时候,该类可能还没有加载,因此在写入配置的时候,可能更多是采用字符串作为第一个参数:

 

 1 Jla.require("Js.Config",2,function(Config)

2 {
3     Config.set("Test.ClassA",configItem1,10);
4     Config.set("Test.ClassA",configItem2,"test string");
5 })

 

    这就是配置的设置过程,虽然非常简单,但是我希望通过这样简单的指定,将配置处理的繁杂工作从各个代码单元之中解放出来,而由Config类来完成,设想只需要改写get方法,就可以实现从服务器或者Cookie等位置读取配置的功能,这些功能的实现将不再和买个代码单元相关,进一步保证了代码单元的独立性和重用性。

//jla public static final String JLA_BBOT = "JLA设置已操作-BBOT"; public static final String JLA_MAKER = "JLA设置已操作-MAKER"; public static final String JLA_CHECKER = "JLA设置已操作-CHECKER"; public static final String JLA_RETURN_MAKER = "JLA退回至MAKER"; public static final String JLA_RETURN_BBOT = "JLA退回至BBOT"; public static final String JLA_COMPLETE = "JLA设置已完成"; public static final Map<String, String> nextTaskMap = new HashMap<>(); public static final Map<String, String> taskMap = new HashMap<>(); static { //jla nextTaskMap.put(JLA_MAKER, "JLA待CHECKER操作"); nextTaskMap.put(JLA_CHECKER, "JLA已完成"); nextTaskMap.put(JLA_RETURN_MAKER, "JLA退回至MAKER"); nextTaskMap.put(JLA_RETURN_BBOT, "JLA退回至BBOT"); taskMap.put(EBBS_OPEN_MAKER, EBBS_OPEN_CHECKER); taskMap.put(EBBS_OPEN_CHECKER, EBBS_RETURN_TO_MAKER); taskMap.put(EBBS_RETURN_TO_MAKER, EBBS_OPEN_MAKER); } public void saveBusinessProgress(AoBusinessProgressVO vo) { log.info("saveBusinessProgress={}", JSON.toJSONString(vo)); List<String> userRole = MDCUtil.getUserRole(); AoBusinessProgressEntity entity = new AoBusinessProgressEntity(); BeanUtils.copyProperties(vo, entity); if (StringUtils.equalsIgnoreCase(vo.getBusinessType(), BusinessProgressEnum.EBBS.getCode())) { List<AoBusinessProgressEntity> list = this.queryByOrderCodeAndType(vo.getOrderCode(), vo.getBusinessType()); if (CollectionUtils.isNotEmpty(list)) { AoBusinessProgressEntity ebbsEntity = list.get(0); entity.setBusinessProgress(taskMap.get(ebbsEntity.getBusinessProgress())); } else { entity.setBusinessProgress(EBBS_OPEN_MAKER); } } entity.setLoginRole(JSON.toJSONString(userRole)); if (Objects.nonNull(vo.getBusinessProgress())) { entity.setTaskProgress(nextTaskMap.get(vo.getBusinessProgress())); } super.saveOrUpdate(entity); } 总感觉我这样写太low ,有什么优雅的写法嘛
最新发布
06-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值