发布于:,更新于:

《方案》分组对象化

传统分组方式太难用,引入一种新的对象化分组

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即可