目录
cola回马枪
Clean Object-Oriented and Layered Architecture
整洁面向对象分层架构
关键点:
- 整洁
- 面向对象
- 分层
- 可扩展
cola组件
上图中的一个个立方体的Module可以表示一个个maven子模块
[api]、[domainmodel]。。。就是组件,Java中一个个包package,最后会有demo展示
client层:api 对外暴露接口,domainmodel 放command命令,domainevent放领域事件
application层:service 接口实现,eventhandler处理领域事件,executor命令处理器,interceptor aop拦截器
domain层:domain 领域实体,domainservice领域服务(对领域行为的封装),gateway(依赖倒置接口)
infrastructure层:config 配置信息, message 消息,repository CURD,gateway(依赖倒置接口实现)
领域事件是什么,领域事件驱动不同域之间的行为,领域事件监听器监听事件的发布
比如订单域新增一笔订单,发布异步事件通知库存域扣减库存
开发团队按照cola组件统一的规范去完成项目
这样代码可以做到分层清楚,可读性强,不再杂乱无章
什么是扩展点
针对不同的业务、用例、场景有不同的业务逻辑处理,可以用扩展点实现
在复杂场景、玩法多样的场景下减少if-else的判断,增强业务代码的扩展性和复用性
针对某一场景做特殊处理等等
比如订单支付就存在花呗支付、支付宝余额不足、支付失败多个场景
一个demo助你认识cola
使用maven脚手架生成cola demo项目
打开终端,执行如下:
mvn archetype:generate -DgroupId=com.alibaba.demo -DartifactId=demo -Dversion=1.0.0-SNAPSHOT -Dpackage=com.alibaba.demo -DarchetypeArtifactId=cola-framework-archetype-service -DarchetypeGroupId=com.alibaba.cola -DarchetypeVersion=2.0.1
打开生成的demo项目
就是我们前面讲的分层架构
项目依赖关系
我们按照client->app->domain->infrastructure的顺序简单看下代码
对外暴露接口
public interface CustomerServiceI {
public Response addCustomer(CustomerAddCmd customerAddCmd);
public MultiResponse<Customer> listByName(CustomerListByNameQry customerListByNameQry);
}
参数是cmd(command 命令)
我们就来看第一个接口,新增用户
CustomerAddCmd
就是新增用户的命令
然后看接口实现类
@Service
public class CustomerServiceImpl implements CustomerServiceI {
@Autowired
private CommandBusI commandBus;
@Override
public Response addCustomer(CustomerAddCmd customerAddCmd) {
return (Response)commandBus.send(customerAddCmd);
}
@Override
public MultiResponse<Customer> listByName(CustomerListByNameQry customerListByNameQry) {
return (MultiResponse<Customer>)commandBus.send(customerListByNameQry);
}
}
commandBus.send(customerAddCmd)
我们cmd发送到commandBus
然后就会有命令执行器去执行这一条命令
核心业务逻辑在domain写
infrastructure写db、redis、mq、rpc相关的
代码更多的细节大家可以自己去看
因为我也是DDD和cola的初学者,也很垃圾,暂时写到这里
转载请注明:汪明鑫的个人博客 » 领域驱动设计菜鸟 cola组件
说点什么
您将是第一位评论人!