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% 遵从,必要时可以根据我们自己的项目情况、
团队情况进行改动,可能是降低标准、可能是提升和优化,最终达到平衡

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注