Cola扩展点基础使用
Cola中提供了一种扩展点的机制,允许我们通过bizId(组织ID)、useCase(使用案例)、scenario(业务场景)三者动态的去选择实现类。有点类似与我们的策略模式,在程序运行的过程中,动态的选择实现类去处理我们的请求。
定义扩展点接口,实现ExtensionPointI
1
2
3
4
5
6
7
8
9public interface OrganizationExtPt extends ExtensionPointI {
/**
* 根据corpId查询企业下所有部门
*
* @return 部门
*/
String getDepartmentsByCorpId();
}钉钉场景扩展点实现
1
2
3
4
5
6
7
8
9
10
11
public class DingTalkOrganizationExt implements OrganizationExtPt {
public String getDepartmentsByCorpId() {
System.out.println("在组织结构业务,通过企业编号获取部门列表的用例,在钉钉的场景下业务的实现处理方式");
System.out.println("通过钉钉的配置信息和API获取得到组织信息,并组装成云枢识别的部门信息");
return "钉钉";
}
}微信扩展点接口实现
1
2
3
4
5
6
7
8
9
10
public class WechatOrganizationExt implements OrganizationExtPt{
public String getDepartmentsByCorpId() {
log.info("业务:组织机构,用例:通过企业编号获取部门 , 场景:企业微信");
log.info("通过企业微信的API获取组织的部门信息,然后包装为需要的部门列表");
return "微信";
}
}扩展点使用
在命令执行器中使用。1
2
3
4
5
6
7
8
9
10
public class OrgazationQueryExe {
private ExtensionExecutor extensionExecutor;
public String execute(OrgnizationQry cmd) {
return extensionExecutor.execute(OrganizationExtPt.class, cmd.getBizScenario(),
ex -> ex.getDepartmentsByCorpId());
}
}测试扩展点的使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class OrganizationController {
private OrgazationQueryExe orgazationQueryExe;
public String listCustomerByName( String corpId, String scenario){
OrgnizationQry qry = new OrgnizationQry();
qry.setCorpId(corpId);
qry.setIncludeDelete(true);
qry.setBizScenario(BizScenario.valueOf("organize","getByCorpId",scenario));
return orgazationQueryExe.execute(qry);
}
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Tangor小屋!
评论

