Welcome everyone

领域驱动设计菜鸟 cola组件

领域驱动设计 汪明鑫 1461浏览 0评论

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组件

喜欢 (0)

说点什么

您将是第一位评论人!

提醒
avatar
wpDiscuz