1、赵嘉铎目录典型的复杂B端集成式集成式业务平台,业务上呈现出鲜明的和特征:客观原因:标准化逻辑拆解与封装机制缺失不同场景业务逻辑互相交织,系统拓展性差,导致开发者对变更的接受度低,甚至不得不让业务方做出妥协业务逻辑缺少边界约束,逻辑四处逃逸,业务梳理、问题定位与需求影响范围评估效率低下,缺陷扩散及变更影响范围大复杂业务流程代码实现冗长晦涩,迭代过程中只会进行局部修改,造成数据重复及碎片化读写,系统性能及稳定性迅速腐化 主观原因:面向数据库编程的设计思想业务逻辑被掩藏在数据库增删改查操作中,代码中充斥着重复且分散数据读写与组装逻辑数据用啥查啥、用到哪查到哪,必须遍历整个工程才能厘清整个数据库结构,
2、难以建立对完整数据模型的全景认知全景认知的确实进一步导致信息孤岛,数据模型缺少统一的顶层设计,大量重复的实体定义导致模型规模野蛮生长,形成恶性循环 标准规约:领域能力、领域服务 通用可执行实体路由机制 拓展点机制O(n1n2.nm)O(n1+n2+.+nm)能力门面定义了能力节点的参数与上下文(1)(2)(5)(3)(4)面向过程设计,业务规则处理与数据读写操作互相交织数据重复及碎片化读写定义领域服务与领域能力执行器四要素:参数、返回值、标准执行步骤:参数预校验上下文校验业务逻辑处理领域事件发布返回值构造业务流程中各个子模块依赖的底层数据在中集中批量查询好执行过程中各个子模块直接从上下文中获取
3、所,并将生成的中间数据放入上下文中流程最后在中统一执行数据的批量持久化操作 领域服务负责定义完整业务流程,并在中将业务流程所需的所有依赖数据初始化到领域服务上下文中 领域能力会被不同的领域服务复用,因此不能与某个特定的领域服务上下文绑定,:调用能力前将服务上下文中的数据映射到能力上下文中,调用完成后再将能力上下文中的生成结果数据映射回服务上下文 最后在领域服务的中将通过服务上下文收集到的所有结果数据持久化到相应的存储介质中:降低能力组合复用的编码复杂度,让业务开发者实现填空式开发:UI界面、外部DSL、:、产品、运营?:Netflix Conductor、LiteFlow、Zeebe、:实现逻
4、辑模块化拆解与组合复用:引入领域能力沉淀具业务逻辑,引入领域服务定义业务流程:模块化拆解造成数据重复及碎片化读写:引入上下文机制在业务流程前后集中进行数据读写:领域能力不能与某个特定领域服务上下文绑定:领域服务与能力分别定义各自的上下文并进行数据投影:上下文投影增加了能力组合串联的编码复杂度这是一个能力编排执行图的示例,它还能起到代码索引的作用,辅助快速定位特定模块的源码位置数据操作与业务逻辑互相交织,流程执行到哪数据读写到哪,数据模型信息被分散到整个工程代码中,以数据库表为基本单位维护数据读写逻辑,底层存储结构直接映射到业务代码中,解决措施 应用场景 rtbadrtbad-framework
5、framework:框架包,承载架构标准规约及分层架构图中基础设施层中的各项基础组件 rtbadrtbad-module/rtbadmodule/rtbad-supportsupport-modulemodule:模型包,承载领域模型中各个聚合及聚合实体对象的定义,其中support-module定义的是支撑域中的实体对象 rtbadrtbad-eventevent:事件包,属于特殊的数据模型层,承载这领域事件对象的定义 rtbadrtbad-composite/rtbadcomposite/rtbad-supportsupport-compoaitecompoaite:聚 合 服 务包,对应
6、分层架构中的领域能力及聚合服务层,承载领域能力及领域服务执行器的实现,其中support-composite用于承载支撑域领域能力及领域服务执行器的实现 rtbadrtbad-appapp:部署层,内部分为不同的子module,每一个子module对应一个部署应用,根据应用职责组装composite层子module,进而实现不同应用下能力及模型共享 rtbadrtbad-apiapi:对外接口SDK包,承载了对外提供的API接口定义收益类型收益详情带来收益的升级措施成本降低:系统升级前后数据库访问量峰值下降近数据库