之路:从码农到工匠》读书笔记"/>
《代码精进之路:从码农到工匠》读书笔记
12、COLA架构
12.2 典型的应用架构
12.2.2 CQRS
12.2.3 六边形架构(适配器架构)
在左侧,适配器依赖端口,该端口的具体实现会被注入适配器,这个实现包含了用例;
在右侧,适配器就是端口的具体实现,他自己将被注入我们的业务逻辑,尽管业务逻辑只知道接口。
12.2.4 洋葱架构
12.3 COLA架构设计
12.3.1 分层设计
COLA将传统的业务逻辑层拆分成应用层、领域层和基础设施层。
1)展现层(Presentation Layer):负责以Rest的格式接受Web请求,然后将请求路由给Application层执行,并返回视图模型(View Model),其载体通常是数据传输对象(Data Transfer Object,DTO);
2)应用层(Application Layer):主要负责获取输入、组装上下文、做输入校验、调用领域层做业务处理,当需要时发送消息通知。若有需要,应用层也可直接访问基础实施层;
3)领域层(Domain Layer):主要封装了核心业务逻辑,并通过领域服务(Domain Service)和领域对象(Entities)的函数对外部提供业务逻辑的计算和处理;
4)基础设施层(Infrastructure Layer):主要包含数据访问通道(Tunnel)、Config和Common。
12.3.2 扩展设计
业务身份:在系统唯一标识的一个业务或者一个场景的标志。
扩展点:思想源自插件模式。每个业务或者场景都可以实现一个或者多个扩展点,一个业务身份加上一个扩展点可以唯一地确定一个扩展实现。
12.3.3 规范设计
包规范:
1)应用包:
2)领域包
3)基础包
命名规范:
规范 | 用途 | 解释 |
---|---|---|
xxxCmd.java | Client Request | Cmd代表command,表示一个用户请求 |
xxxCO.java | Client Object | 客户对象,用于传递数据,等同于DTO |
xxxServiceI.java | API Service | API接口类 |
xxxCmdExe.java | Command Executor | 命令模式,每一个用户请求对应一个执行器 |
xxxInterceptor.java | Command Interceptor | 拦截器,用于处理切面逻辑 |
xxxExtPt.java | Extension Point | 扩展点 |
xxxExt.java | Extension | 扩展实现 |
xxxValidator.java | Validator | 校验器,用于校验的类 |
xxxConvertor.java | Convertor | 转化器,实现不同层级对象互转 |
xxxAsambler.java | Assembler | 组装器,组装外部服务调用参数 |
xxxE.java | Entity | 代表领域实体 |
xxxV.java | Value Object | 代表值对象 |
xxxRepository.java | Repository | 仓储接口 |
xxxDomainService.java | Domain Service | 领域服务 |
xxxDO.java | Data Object | 数据对象,用于持久化 |
xxxTunnel.java | Data Tunnel | 数据通道,DAO是最常见的通道,也可以是其他通道 |
xxxConstant.java | Constant class | 常量类 |
xxxConfig.java | Configuration class | 配置类 |
xxxUtil.java | Utility class | 工具类(尽量少使用util的命名,太通用,不够显性化) |
12.4 COLA测试(不是很理解)
12.5 COLA架构总览
COLA层次关系和依赖关系图:
COLA架构图
13、工匠平台(基于领域驱动的设计案例)
13.5 领域模型
13.5.1 领域建模
第一次建模:一个员工总是归属于一个团队,员工档案应该包含一组度量,每一个度量都能计算分数。
第二次建模:一个度量(Metric)可能会包含一个或多个度量项(MetricItem)
第三次建模:每个度量的权重(Weight)会因为岗位和角色的不同而不一样,因此将其抽象成实体,利用多台提升系统的扩展性。
第四次建模:度量是有层次关系的,因此引入了主度量(MainMetric)和子度量(SubMetric)。
13.5.2 领域词汇表
在业务讨论和领域建模的过程中,形成了一套描述该领域的词汇表:
team(团队)、profile(员工信息)、metric(度量)、mainMetric(主度量)、subMetric(子度量)、metricItem(度量项)、score(分数)、weight(权重)。
更多推荐
《代码精进之路:从码农到工匠》读书笔记
发布评论