-
为multiple-core提供平台和业务分离能力
-
不仅为多渠道实现,也可以为处理if—else沉淀平台能力
- 引入pom
<dependency>
<groupId>com.ocean.swak</groupId>
<artifactId>ocean-swak</artifactId>
</dependency>
-
分析业务上不变的和可变的
-
把可变的业务提取 成接口
@SwakInterface(desc = "发财的各种方式")
public interface PayBiz {
String getPayUrl(String channel, SwakContext context);
}
- 写不同的实现类
// tags 标识 manwei 漫威
@SwakBiz(tags = "manwei")
public class ManWeiPayBiz implements PayBiz {
@Override
public String getPayUrl(String channel, SwakContext context) {
return "manwei---- getpayUrl";
}
}
// tag 标识 dc
@SwakBiz(tags = "dc")
public class DcPayBiz implements PayBiz {
@Autowired
private BigBigService bigBigService;
@Autowired
private SwakService swakService;
@Override
public String getPayUrl(String channel, SwakContext context) {
bigBigService.bigTest();
swakService.test();
return "dc --- get pay Url";
}
}
@Primary
@SwakBiz
public class DefaultPayBiz implements PayBiz {
@Override
public String getPayUrl(String channel, SwakContext context) {
return "default --- biz";
}
}
- 然后 注入接口 调用
@Service
public class HejService {
// 注入 接口
@Autowired
private PayBiz payBiz;
@Autowired
private SwakService swakService;
public void getBigPlan(String param) {
SwakContext context = new SwakContext();
context.setTags(Lists.newArrayList("dc"));
// 调用接口 【采用 SwakContext 方式 】
String result = payBiz.getPayUrl("dc", context);
System.out.println("===");
System.out.println(result);
swakService.test();
}
}
-
tag1 tag2 tag3
-
有一个接口开始有 tag1 ,tag2 tag3的两个实现 ,但是有一个业务需要在tag1,tag2中都有
- 命中一个tag就执行,返回结果
- 命中 输入[tag1, tag2] ,tag1-->有,否 tag2 【优先级配置由调用方配置】
- 思考: 如何配置接口的调用方式【结合配置平台】
- A 业务是主干业务抽离的,然后需要 远程服务的方式给主干应用提供服务
- 接口即是主干业务的提供的扩展
- 主干应用开发人员来说,应该提供单个接口以支持所有业务类型
- 怎么定义Do
public class ItemDo{
private String type;
private Integer status;
private Map<String, Object> bizMap;
}
- 比如我要找一个超能力者 dc中没有 ,我要去maiwen中找怎么做?
规则应该是: dc ---> maiwen [dc --> next]
- 如果执行两个 要合并结果呢?[并行执行呢]
- 所以应该是 要有一套 执行规则
- 用注解
- 兼容用json配置 执行规则