COLA
架构图
四层结构
适配层(Adapter Layer):负责对前端展示(web,wireless,wap)的路由和适配,对于传统B/S系统而言,adapter就相当于MVC中的controller;
应用层(Application Layer):主要负责获取输入,组装上下文,参数校验,调用领域层做业务处理,如果需要的话,发送消息通知等。层次是开放的,应用层也可以绕过领域层,直接访问基础实施层;
领域层(Domain Layer):主要是封装了核心业务逻辑,并通过领域服务(Domain Service)和领域对象(Domain Entity)的方法对App层提供业务实体和业务逻辑计算。领域是应用的核心,不依赖任何其他层次;
基础实施层(Infrastructure Layer):主要负责技术细节问题的处理,比如数据库的CRUD、搜索引擎、文件系统、分布式服务的RPC等。此外,领域防腐的重任也落在这里,外部依赖需要通过gateway的转义处理,才能被上面的App层和Domain层使用。
组件说明
- gateway是为了防腐
- Infra层起数据屏蔽作用,如果提供的接口不变,数据层的改动都可以直接在Infra里面完成
- 第三方服务的调用在Infra层
- 为了易于理解可以把Adapter改为Controller
调用关系
- APP —> Infra, 为了可以直接CRUD,同时也是为什么Infra 可以直接依赖Client包
- APP —> gateway, 为了解耦/防腐/数据聚合
- APP —> domain service —> gateway —> 存储/缓存/外部服务, 为了实现复杂领域业务
灵活使用,覆盖不同的场景
调用过程及对象使用
- Client
定义如下对象- VO(View Object),Adapter层使用
- Command,APP层使用,包含Qry、Add/Update/Delete
- DomainEvent,Infra层发布领域事件使用
- ServiceI,APP层实现该服务对外提供应用API
- Adapter层
接收Command或者参数列表传递给ServiceI
返回Response+VO给前端 - APP层
ServiceImpl接收Command- 直接/间接传给Mapper
- 转换成Entity,传给gateway或者domainservice
返回Response+VO给Adapter层
- Domain — 不依赖其他任何层
定义领域对象Entity
Entity作为gateway的参数或返回
Entity作为domain service的参数或返回 - Infa
- 调用数据库直接用Mybatis的Mapper,返回DO
- 调用第三方服务封装DO和Mapper,返回DO
- gatewayImpl通过mapper聚合来提供上层数据接口,返回Entity
- DomainEvent的发布