对于重构的一点优化

功能入口，权限检测，反射，注册
适用于当业务复杂到一定程度之后，之后的每一步的添加和修改，都有可能和之前的业务逻辑进行交互和耦合的时候，传统的if 和 switch在状态变动的时候，修改过于频繁极其容易出现疏漏之处。
设定业务和权限的管理模型，可以分成三个部分，用户权限，业务权限，模块。
在模块的入口处，检测当前权限是否可以允许运行，而后检测业务模块判断。
检测的逻辑通过注册，在dll或者业务挂载或者初始化进去，设定前后运行的前后顺序，只在条件允许的情况下启动。
会稍微拖慢一下运行的启动逻辑，但是不会对业务中产生干扰。
复杂的业务逻辑体现在，业务的入口，中断，关闭，几个部分。
把最底层的模块抽象出，启动，关闭，切换三个部分。
比如调用硬件的业务，可以视为在业务权限检测后，检测硬件的使用权限，然后调用。
业务在关闭之后，关闭加载的硬件。
如果需要，切换的状态可以特殊定义，可以在硬件不关闭的情况下，改变参数。
假设业务无，现在执行业务1，需要调用abc三个子模块。先检测执行权限，复合后，检测判断当前状态，执行切换操作，比如业务在执行期间，根据优先级，判断是否可以强制关闭，如果业务想换，底层可以执行切换，业务不相关，则关闭上一步，然后执行新的。
比如切换硬件参数，在函数入口处，判断执行权限后，并不直接对硬件参数进行修改。
通过get和set方法，修改暂存变量，在暂存变量中，判断是否需要直接下发指令。
在默认业务中可以直接修改，在复杂业务时，则不需要，复杂业务中，因为修改上层变量，和物理硬件无关，所以改动内存即可，复杂业务在切换中调去内存参数即可。

这样设计代码框架比较好，但是代码写起来比较复杂，状态位的判定非常多，并且，继承结构并不是很好做。

权限判定可以通过数据库或者持久化的手段进行，这个逻辑中最简单的应用就是许可证。

权限认证不适合高频业务，最好只放在函数入口或者是对时间要求不敏感的区域中。

这样设计的业务结构，变动代码会少很多，可以通过预设的配置去修改权限。

不过会造成大量重复的代码，以及配置繁琐。