谈谈业务逻辑中灰度功能的实现
2015-12-17 13:21
211 查看
很庆幸,自己初入职场的时候,有一个要求严格的师父,从编码习惯,风格到函数名,类名的命名规则,以及写代码时各种设计的原则,还有思考解决问题的方式,突然感觉,自己真的学到了很多,感谢朱老大咯,先分享下今天设计一个灰度功能的例子吧
先介绍下灰度功能:
1.有灰度开关用来控制是否灰度
2.有灰度百分比,根据用户身份标识信息做字符串hash,然后对100取余,对百分比用户做灰度
3.每个接口有自己不同的灰度百分比和灰度开关
4.有白名单功能,对在白名单内的人做灰度
自己的设计:当时考虑较少,在一个通用类里面加载了灰度开关信息以及灰度百分比函数等,然后在需要做灰度的地方调用这些函数
优点:实现简单方便,编码简单
缺点:1.当需要灰度的接口函数越来越多的时候,会导致这个通用类类越来越大
2.对外提供的不是一个整体的函数,而是需要用户在使用的时候自行处理,判断需要哪些灰度逻辑等
3.没有对这个方法进行封装,可扩展性不强
4.没有定时读取配置文件的功能,每次修改都需要重启服务
改良后的设计:1.将和灰度相关的逻辑都放在一个类里面
2.这个类对外提供的接口已经封装好了,返回值是 true或者false,返回值代表灰度还是不灰度
3.考虑类内的哪些函数是通用函数,哪些函数和业务逻辑相关
4.读取配置文件的过程是定时读取的,方便修改
5.定时读取要考虑 在读取的时候其他地方有没有正在使用,就在在对外提供的方法里面要先做一次值拷贝,在定时加载的地方也做一次值拷贝,就可以解决问题。
优点:见自己设计的缺点
缺点:就是编码比较麻烦
先介绍下灰度功能:
1.有灰度开关用来控制是否灰度
2.有灰度百分比,根据用户身份标识信息做字符串hash,然后对100取余,对百分比用户做灰度
3.每个接口有自己不同的灰度百分比和灰度开关
4.有白名单功能,对在白名单内的人做灰度
自己的设计:当时考虑较少,在一个通用类里面加载了灰度开关信息以及灰度百分比函数等,然后在需要做灰度的地方调用这些函数
优点:实现简单方便,编码简单
缺点:1.当需要灰度的接口函数越来越多的时候,会导致这个通用类类越来越大
2.对外提供的不是一个整体的函数,而是需要用户在使用的时候自行处理,判断需要哪些灰度逻辑等
3.没有对这个方法进行封装,可扩展性不强
4.没有定时读取配置文件的功能,每次修改都需要重启服务
改良后的设计:1.将和灰度相关的逻辑都放在一个类里面
2.这个类对外提供的接口已经封装好了,返回值是 true或者false,返回值代表灰度还是不灰度
3.考虑类内的哪些函数是通用函数,哪些函数和业务逻辑相关
4.读取配置文件的过程是定时读取的,方便修改
5.定时读取要考虑 在读取的时候其他地方有没有正在使用,就在在对外提供的方法里面要先做一次值拷贝,在定时加载的地方也做一次值拷贝,就可以解决问题。
优点:见自己设计的缺点
缺点:就是编码比较麻烦
相关文章推荐
- 自己简单封装的一个CDialog类实例
- PHP类的封装与继承详解
- javascript封装简单实现方法
- 封装好的一个万能检测表单的方法
- jquery datatable后台封装数据示例代码
- c#基础学习之封装
- Java游戏服务器之数据库表存取封装
- 纯JavaScript实现的兼容各浏览器的添加和移除事件封装
- PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
- javascript的函数、创建对象、封装、属性和方法、继承
- 异步的SQL数据库封装详解
- 深入解析C++编程中类的封装特性
- C++封装IATHOOK类实例
- javascript封装 Cookie 应用接口
- WebService 的简单封装接口调用方法
- php实现ip白名单黑名单功能
- Node.js中对通用模块的封装方法
- 学习JavaScript设计模式(封装)
- 原生Javascript封装的一个AJAX函数分享
- javascript 面向对象封装与继承