alibaba-COLA框架module分析
概览
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
可以包含如下一些包:
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。
总结:各种代码类应该放到合适的位置,使其自明,符合他们所在的分层,各司其职,不能混淆。