使用工具自动化配置读取

当你知道使用配置代替HardCode说明你从新手变成了一名初级程序,当有一天你意识到你的配置是需要使用工具去驱动的,这时候你已经走在了进阶为行家的路上了。我之前看有些朋友写的配置读取工具类是针对一个一个Model去写,每个Model都翻一种花样去写,我想说这代码看起来就像是喝醉酒之后写的。好了,现在该醒醒酒了,下文讲一个胡乱编造的故事权当娱乐

小明在开发一款游戏,由于游戏中需要调整的参数太多,于是小明把各个人物的属性都序列化在Unity的Inspect中显示。开发了几天之后小明发现自己需要配置的参数太多了,于是决定用一个配置来集中存放这些游戏中数据。然后小明用Json保存了游戏的数据,并且将配置移交给策划配去了,这份配置看起来就像是这样:

{
    1: {
        "ID": 1,
        "Name": "keyle1",
        "Power": 123,
        "RangeType": 12,
        "ShotRange": 101.5
    },
    2: {
        "ID": 2,
        "Name": "keyle2",
        "Power": 123,
        "RangeType": 13,
        "ShotRange": 101.8
    },
    3: {
        "ID": 3,
        "Name": "keyle3",
        "Power": 123,
        "RangeType": 14,
        "ShotRange": 102.1
    },
    4: {
        "ID": 4,
        "Name": "keyle4",
        "Power": 123,
        "RangeType": 15,
        "ShotRange": 102.4
    },
    5: {
        "ID": 5,
        "Name": "keyle5",
        "Power": 123,
        "RangeType": 16,
        "ShotRange": 102.7
    },
    6: {
        "ID": 6,
        "Name": "keyle6",
        "Power": 123,
        "RangeType": 17,
        "ShotRange": 103
    },
    7: {
        "ID": 7,
        "Name": "keyle7",
        "Power": 123,
        "RangeType": 18,
        "ShotRange": 103.3
    },

   ...
}

然后写了如下的Model代码

internal class Hero
    {

        [JsonProperty("ID")]
        public int ID { get; set; }

        [JsonProperty("Name")]
        public string Name { get; set; }

        [JsonProperty("Power")]
        public int Power { get; set; }

        [JsonProperty("RangeType")]
        public int RangeType { get; set; }

        [JsonProperty("ShotRange")]
        public float ShotRange { get; set; }
    }

现在这样做貌似还能解决配置的需求,策划同学天天瞅着Json文件一个一个字段修改,时不时改错几个数值,小明回过头来还要帮策划君改Json配置的格式。

又过了一阵子,小明不断的开发出游戏中新的功能同时伴随着新的Json配置出来,小明要花时间与策划协商不同的Model然后根据策划的需求不断的改动Model,慢慢的策划君不乐意了,改的文件太多了,经常由于格式问题导致双方都耗时间在上面。

于是就有了这个

1

策划君很开心从此以后就欢乐的使用工具生成了Json配置与小明使用的代码。俩人过上了幸福的生活…

接下来如何读取?

如何写配置自动化读取,假设你已经自动生成了配置文件,现在你已经完成一大半。

在Unity下将配置置于Resource内,使用如下代码读取

public class ConfigReader
    {
        private static ConfigReader instance;
        public static ConfigReader Instance { get { return instance ?? (instance = new ConfigReader()); } }
        private ConfigReader() { }

        /// <summary>
        /// 非Untiy环境可以使用如下代码
        /// </summary>
        public Dictionary<int, T> LoadConfig<T>() where T : class
        {
            string path = Directory.GetCurrentDirectory();
            path = Path.Combine(path, string.Format("{0}Config.json", typeof(T).Name));
            string str = File.ReadAllText(path);
            return JsonConvert.DeserializeObject<Dictionary<int, T>>(str);
        }

        //Unity数据读取使用此代码
        //public Dictionary<int, T> LoadConfig<T>() where T : class
        //{
        //    return JsonConvert.DeserializeObject<Dictionary<int, T>>(Resources.Load<TextAsset>(string.Format("Config/{0}Config", typeof(T).Name)).ToString());
        //}

至此自动化的读取完成,当然架构上层面仍然需要设计,比如使用泛型约束去做抽象层面上的数据查询 等等。本章只是为后续的博文做铺垫,另外需要此工具的可以留言哟。

本项目为开源项目,代码正在重构中 如有兴趣可以加到群里一起聊聊

http://git.oschina.net/keyle/UnityExcel2JsonGenCSharper

时间: 09-23

使用工具自动化配置读取的相关文章

Oracle 客户端安装 + pl/sql工具安装配置

Oracle 客户端安装 +  pl/sql工具安装配置 下载oracle客户端,并在本地安装. 11g下载地址为: http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html 10g下载地址为: http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html 根据自己机器或者oracle服

Spring Boot 探索系列 - 自动化配置篇

26. Logging Prev  Part IV. Spring Boot features  Next 26. Logging Spring Boot uses Commons Logging for all internal logging, but leaves the underlying log implementation open. Default configurations are provided for Java Util Logging,Log4J, Log4J2 an

Putty 工具 保存配置的 小技巧

用Putty 已经很长时间了,但一直被一个问题困扰,有时候是懒得去弄,反正也不怎么碍事,今天小研究了下,把这个问题解决了,心里也舒服了. Putty是一个免费小巧的Win32平台下的telnet,rlogin和ssh客户端. 它的主程序不到1M, 是完全免费的telnet和ssh客户端工具. 而且无需安装,下载后在桌面建个快捷方式就行 . Putty官网的下载地址: http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html 主

Esxi自动化配置脚本

记录一下ESXi自动化配置脚本,脚本功能及脚本如下: 创建站点名称: 配置IP和vmotion IP及子网掩码 配置Vlan 删除默认端口组 增加vSwitch 设置NTP ##################################################################################################################### ##  $FileName: esx_conf.ps1 ##  $Version: 1.2

solr分布式索引【实战一、分片配置读取:工具类configUtil.java,读取配置代码片段,配置实例】

1 private static Properties prop = new Properties(); 2 3 private static String confFilePath = "conf" + File.separator + "config.properties";// 配置文件目录 4 static { 5 // 加载properties 6 InputStream is = null; 7 InputStreamReader isr = null;

系统自动化配置和管理工具:SaltStack

http://os.51cto.com/art/201308/409041.htm SaltStack                2 Salt,,一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯. salt底层采用动态的连接总线, 使其可以用于编配, 远程执行, 配置管理等等. 参见 其他文档 下载Salt文档的副本: · PDF · ePub 查看之前的Salt版本文档请访问 http://salt.readthed

mount挂载,dd 工具,配置配额系统,RAID阵列,逻辑卷管理器LVM

mount mount挂载 vim /etc/fstab 将常用的挂载的设备写入系统表中 文件挂载配置文件 /etc/fstab /etc/fstab每行定义一个要挂载的文件系统: 要挂载的设备或伪文件系统 挂载点 文件系统类型 挂载选项 转储频率 自检次序 要挂载的设备或伪文件系统: 设备文件.LABEL(LABEL="").UUID(UUID="").伪文件系统名称(proc, sysfs) 挂载选项:defaults 转储频率:0:不做备份 每天转储 每隔一天

自定义工具类---配置文件读取方法集成类

此类集成了一部分用于读取properties文件的数据的方法,如日期,字符串,实数型,浮点型,可自行扩展 ConfigUtil.java 1 package cn.jamsbwo.util; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.IOException; 6 import java.text.ParseException; 7 import java.text.SimpleDateF

Openwrt的自动化配置

Openwrt的luci给用户带来了易用的图形化界面,然而Openwrt终归是Linux,命令行依旧是无法抛弃的. 命令行高效,强大,但不够人性化.于是乎,把一些简单常用的功能用c#写了个小程序,一键完成. 以修改一个宽带账号密码为例,首先还是模拟登录SSH.这里用到了SharpSSH这个开源的组件 项目的主页在此http://www.tamirgal.com/blog/page/sharpssh.aspx 里面也有源码下载.下载源码编译一下,得到dll文件,这源码就先放一边了 新建一个c#工程