谈谈业务逻辑中灰度功能的实现

        很庆幸,自己初入职场的时候,有一个要求严格的师父,从编码习惯,风格到函数名,类名的命名规则,以及写代码时各种设计的原则,还有思考解决问题的方式,突然感觉,自己真的学到了很多,感谢朱老大咯,先分享下今天设计一个灰度功能的例子吧

      先介绍下灰度功能:

      1.有灰度开关用来控制是否灰度

      2.有灰度百分比,根据用户身份标识信息做字符串hash,然后对100取余,对百分比用户做灰度

      3.每个接口有自己不同的灰度百分比和灰度开关

      4.有白名单功能,对在白名单内的人做灰度


      自己的设计:当时考虑较少,在一个通用类里面加载了灰度开关信息以及灰度百分比函数等,然后在需要做灰度的地方调用这些函数

      优点:实现简单方便,编码简单

      缺点:1.当需要灰度的接口函数越来越多的时候,会导致这个通用类类越来越大

                 2.对外提供的不是一个整体的函数,而是需要用户在使用的时候自行处理,判断需要哪些灰度逻辑等

                 3.没有对这个方法进行封装,可扩展性不强

                 4.没有定时读取配置文件的功能,每次修改都需要重启服务

      改良后的设计:1.将和灰度相关的逻辑都放在一个类里面

                                2.这个类对外提供的接口已经封装好了,返回值是 true或者false,返回值代表灰度还是不灰度

                                3.考虑类内的哪些函数是通用函数,哪些函数和业务逻辑相关

                                4.读取配置文件的过程是定时读取的,方便修改

                                5.定时读取要考虑 在读取的时候其他地方有没有正在使用,就在在对外提供的方法里面要先做一次值拷贝,在定时加载的地方也做一次值拷贝,就可以解决问题。

        优点:见自己设计的缺点

         缺点:就是编码比较麻烦

你可能感兴趣的:(平时踩的坑,灰度,白名单,封装)