Cola是阿里同学研发的一个通用项目框架,本文基于 Cola4.0
Cola 框架代码结构解析
- adaptor
- web
- controller
- app
- cmd
- query
- CmdExe
- event
- handler
- service
- client
- api
- service interface
- context
- dto
- clientobject - 等价于 VO
- domain event - 领域事件
- cmd
- query
- domain
- gateway
- domain entity
- infrastructure
- common
- event
- exception
- config
- converter
- gateway impl
- database
- PO
- mapper
- rpc
- XXXGatewayImpl
----------------------------------------------------------------------
adaptor
adaptor.web
adaptor.controller
------------------------------
app.cmd
app.cmd.query
app.cmd.CmdExe
app.event
app.event.handler
app.service
------------------------------
client
client.api
client.api.serviceinterface - 业务服务 interface
client.context
client.dto
client.dto.clientobject - 等价于 VO
client.dto.domain event - 领域事件
client.dto.cmd
client.dto.query
------------------------------
domain
domain.gateway - gateway 接口层,防腐?
------------------------------
infrastructure.common
infrastructure.common.event
infrastructure.common.event.publisher - 只包含消息总线相关的底层框架
infrastructure.common.exception
infrastructure.config
infrastructure.converter
infrastructure.gatewayimpl
infrastructure.gatewayimpl.database
infrastructure.gatewayimpl.po
infrastructure.gatewayimpl.mapper
infrastructure.gatewayimpl.rpc
------------------------------------------------------------------------------------
分析下,主要模块的调用链,及每种数据对象用在哪一层
------------------------------------------------
adapter -> app service -> cmd/query exe -> gateway -> mapper
| | | | |
cmd/query -> cmd/query -> cmd/query -> domain entity -> PO
| -> event publisher
| |
| -> event
-> mapper
|
-> domain entity -> PO
------------------------------------------------------------------------------------
event handler -> app service -> cmd/query exe -> gateway -> mapper
| | | | |
event -> cmd -> cmd/query -> domain entity -> PO
------------------------------------------------------------------------------------
逻辑处理类型(从请求到响应):
- 参数校验(参数是否为空等等)
- 业务参数校验(下单时,商品是否下架;数据权限;)
-
------------------------------------------------------------------------------------
question:
- exe 什么情况下调用 gateway,什么情况下直接调用 mapper?
- 当 gateway 会产生 event 的时候,那么,是否只有 gateway 才能生成 event ?
------------------------------------------------------------------------------------
Rx分析
Rx是以前一位同事的项目,这里只简单描述它的代码结构
------------------------------------------------ application.service domain domain.cmd domain.cmd.handler domain.event domain.event.handler infrastructure infrastructure.config infrastructure.exception infrastructure.repository interfaces.api interfaces.assembler interfaces.dto interfaces.validation ------------------------------------------------ 分析下,主要模块的调用链,及每种数据对象用在哪一层 ------------------------------------------------ interfaces -> app service -> cmd gateway | | | request -> request -> cmd | | | -> repository 只有查询操作 | | | -> infr 基础设施 | | | -> security 用来获取当前登录用户信息 | | | | | -> validation 请求参数校验 cmd handler -> domain service -> repository -> 实例化domain及domain service ------------------------------------------------ |
小结
无论是框架还是协议还是规范,都是前辈们根据他们的项目经验总结的成果,但我们不一定必须 100% 遵从,必要时可以根据我们自己的项目情况、
团队情况进行改动,可能是降低标准、可能是提升和优化,最终达到平衡