发布于:,更新于:
《方案》分组对象化
传统分组方式太难用,引入一种新的对象化分组
1.分组为什么要对象化
传统的分组方法
用户被分配了一个分组ID
在程序中的各个层次和环节,通过变量的与或组合,再经过if else判断分组ID,给用户应用不同的逻辑
传统的弊端
if else过多
逻辑组合复杂、混乱
代码改动风险大
代码块不美观
不利于检索
没有和外部逻辑解耦
对象化的分组
每个分组对象内置一个ID,都有自己的身份,对象通过对比内置ID与外部ID,自己决定是否激活逻辑
2.分组对象设计(C++)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| class GroupX { protected: int innerID = X ; bool enable = false ; public: void setEnable(int ID) { enable = ID == innerID ; } void doSomething(lambda) { if(enable) lambda } void doSomething2(lambda) { if(enable) lambda } ... }
|
3.用宏简化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| #define GROUP(XXX,YYY) \ class GroupXXX \ { int innerID = XXX ; \ bool enable = false ; \ public: \ void setEnable(int ID) \ { enable = ID == innerID ; \ } YYY \ }
GROUP(1,); GROUP(2, void doSomething(lambda); ); GROUP(3, void doSomething(lambda); );
|
4.举例
例:
设 ID = 2
通过执行:
group1.setEnable(ID) ;
group2.setEnable(ID) ;
group3.setEnable(ID) ;
那么最终只有group2被激活,group1、3因为ID不匹配未激活 ;
最终,以下代码,只有group2的逻辑被执行,1、3的逻辑不会执行
group1.doSomething(lambda)
group2.doSomething(lambda)
group3.doSomething(lambda)
要想看在工程中索引某个分组,那么直接搜索group2即可