alibaba-COLA框架module分析

郗浩
2023-12-01

概览

COLA-framework的module如下:

cola-common
cola-core
cola-test

用maven-archetype生成的代码例子的module情况:

demo-app
demo-client
demo-controller
demo-domain
demo-infrastructure
start

各module介绍

按照数据流的顺序,分别介绍各moduel的作用,以及代码放置的地方:

xxx-controller:

容易理解,放置所有的`@RestController`;
一般的分包如下:

com.alibaba.xxx.controller

xxx-app:

主要负责获取输入,组装context,做输入校验,发送消息给领域层做业务处理,监听确认消息,如果需要的话使用MetaQ进行消息通知;

一般包含以下这些包:

com.alibaba.sample.command                // CmdExe执行器
com.alibaba.sample.command.query          // QryExe执行器
com.alibaba.sample.command.extensionpoint // 扩展点(接口)
com.alibaba.sample.command.extension      // 扩展(实现)
com.alibaba.sample.command.interceptor    // 各种拦截器@XxxInterceptor
com.alibaba.sample.convertor              // ConvertorI实现
com.alibaba.sample.event.handler          // 事件处理器@EventHandler
com.alibaba.sample.repository             // repository,调用db tunnel
com.alibaba.sample.service                // Service的实现
com.alibaba.sample.validator              // ValidatorI实现
com.alibaba.sample.assembler              // 参数装配器

CmdExe和QryExe依赖Repository;

Repository依赖Tunnel获取Domain数据,依赖Converter来做DO/CO等的转换,依赖DomainEventPublisher来发布事件;
xxx-client
xxx-client应该不是功能独立的层,而是作为COLA-framework中`cola-common`模块的第二方库,什么意思?查看cola-common源码和xxx-client的代码,它们的类型应该是平行对应的。即`xxx-client`包含的代码应该是常见的`Service`的接口Facade,上下文信息`Context`以及dto(`ClientObject`、`DomainObject`、`DomainEvent`、`Cmd`和`Qry`)等。
`xxx-client`的分包情况一般是:

com.alibaba.sample.api                // Service接口
com.alibaba.sample.context            // 一般在拦截器中,请求处理前初始化,上下文在一个请求中会被各层用到
com.alibaba.sample.dto                // Cmd和Qry,一个Cmd就是客户的一个请求;Qry是一种特殊的Cmd,它直接操作Tunnel返回数据
com.alibaba.sample.dto.clientobject   // 用于调用者(controller、RPC、MTop等)与APP之间的数据转换
com.alibaba.sample.dto.domainevent    // 领域事件

xxx-domain

主要是通过领域服务(Domain Service),领域对象(Domain Object)的交互,对上层提供业务逻辑的处理,然后调用下层Repository做持久化处理;

一般包命名如下:

com.alibaba.sample.domain.xxxx            // xxxx表示具体的领域对象名称
com.alibaba.sample.domain.xxxx.entity
com.alibaba.sample.domain.xxxx.factory            

除了领域对象(属性和行为)外,还可以包含相关的枚举类、DomainFactory等;

xxx-infrastructure

主要包含Repository,Config,Common和message,Repository负责数据的CRUD操作,通过Tunnel的抽象概念来屏蔽具体的数据来源,来源可以是MySQL,NoSql,Search,甚至是HSF等;Config负责应用的配置;Common是一写工具类;负责message通信的也应该放在这一层。

可以包含如下一些包:

com.alibaba.sample.common                // 如一些BizCode业务线代码
com.alibaba.sample.common.exception      // 系统异常类,ErrorCodeI的实现
com.alibaba.sample.common.util           // util
com.alibaba.sample.config                // ColaConfig等
com.alibaba.craftsman.tunnel.database    // 数据库tunnel,mybatis Mapper等
com.alibaba.sample.tunnel.database.dataobject    // 数据库tunnel的DO
com.alibaba.craftsman.tunnel.rpc         // rpc tunnel

start

SpringBoot的启动类,入口,读取ColaConfig启动COLA。

总结:各种代码类应该放到合适的位置,使其自明,符合他们所在的分层,各司其职,不能混淆。

 类似资料: