课程大纲
软件设计原则、思路或最佳实践
|
|
一、 企业级架构设计概述
1. 认识分层架构
2. 分层架构的演化
3. 领域驱动架构的演进
4. 界限上下文与架构
5. 六边形架构
6. 端口与适配器
7. 整洁架构
8. CQRS架构
9. 在CQRS中处理具有最终一致性的查询模型
10.事件溯源 EventSouring
11.使用乐观锁处理并发更新
12.事件溯源和发布事件
13.幂等方式处理消息
14.使用快照提升性能
15.管道与过滤器
16.SAGA(消息驱动事务)
17.协同式与编排式
18.SAGA下实现隔离
|
软件设计中的核心原则 SOLID
|
|
二、单一职责原则
1. 次时代租车服务终端 (ARCS)的初步设计
2. 用例 (UseCase) 的作用 – 划分边界及概览
3. SRP的设计误区
4. 重构至 SRP 的方法1:提取类
5. 重构至 SRP 的方法2:Proxy模式
6. 前端代码 SRP重构:投票组件
7. 过程性代码的 SRP
违反直觉的真相:性能优化的步骤
|
|
三、开放封闭原则
1. 代码中的接线板是什么?
2. 编程价值观 – 沟通,简单,灵活
3. 如何做到对扩展开放,对修改封闭
4. 次时代租车服务终端 (ARCS)的促销需求
5. 笨拙的促销实现
6. 如何不修改代码而改变它的行为
7. 最简单的 OCP实现 – 策略模式
8. 前端代码重构:拆分复杂表达式
敏捷开发的精髓 – 只被第一颗子弹击中
|
|
四、里氏替换原则
1. 什么才是好的继承关系
2. 子类为什么要能透明的替换基类
3. 次时代租车服务终端 (ARCS)的新需求 – 电动轿车费用计算
4. 白盒复用 还是 黑盒复用
5. IS-A的精髓:针对属性还是针对行为
6. 契约式设计继承体系
7. 重构方法:提升为兄弟类
8. 前端代码重构:抽取函数
9. 如何才能让 次时代租车服务终端 (ARCS)的代码符合 LSP
这样做我们可能会引入什么新的问题?
|
|
五、接口隔离原则
1. 接口“变胖”的问题 – 接口污染
2. 佳能一体机的遗留接口问题
3. 如何实现接口分离 – 适配器模式
4. 类适配器 – 多继承
5. 对象适配器 – 委托
6. 使用单元测试来发现问题
7. 前端代码重构:使用模板方法重新组织逻辑
8. 次时代租车服务终端 (ARCS)在接口划分上的问题
9. 如何简化复杂的逻辑
10. 如何使用模板方法分离抽象与具体
案例:ATM机接口设计的演化
|
|
六、依赖倒置原则
1. 结构化设计理念的问题
2. 对象化设计理念
3. 依赖倒置到底倒置了什么
4. 如何分离关注点
5. DI-依赖注入解决的问题:讲对象的创建与使用分离
案例:消息队列设计的演化
|
领域层的设计与实践
|
|
七、实体 – 数据容器还是行为载体
6. 贫血模型
7. 如何避免贫血,实体与领域服务之间的分寸
8. 唯一标识
9. 委派标识
10.案例:实现实体层超类型(Layer Supertype)
11.实战 -任务分配执行系统 实体行为归属甄别
|
|
八、值对象 – 性能提升小帮手
1. 什么是值对象
2. 值对象的特征
3. 为什么值对象这么容易被忽略
4. 案例:地址建模与值对象
5. 案例:实现值对象层超类型
|
|
九、聚合 – 比类更高一层的封装
1. 聚合设计原则
2. 聚合设计的过程
3. 聚合的一致性边界
4. 一个事务中只处理一个聚合
5. UML 中的聚合 与 DDD 中的聚合
6. 聚合内实现事务一致性
7. 聚合外实现最终一致性
8. 案例:更新订单状态与库存扣减 Version 1.0
9. 案例:更新订单状态与库存扣减 Version 2.0
10.聚合设计的注意点
|
服务层的设计与实践
|
|
十、微服务的入口 - 应用服务
1. 用例 (Use Case) 与应用服务
2. 微服务的网关 与 应用服务 之间的关系
3. 应用服务中的 编排,转换,验证,转发
4. 工作单元 (Unit of Work)
5. 数据传输对象 (Data Transfer Object)
6. 事务脚本 (Transaction Script) 与领域模型
7. 依赖注入在应用服务中的使用
8. 案例:实现应用服务
9. 应用服务的关注点
10.实战 -任务分配执行系统 应用层构建
|
|
十一、领域服务 – 不是实体本身的行为都归它
1. 领域服务的幂等性
2. 案例:实现领域服务
3. 实战 -任务分配执行系统 领域服务层构建
|
|
十二、资源库 – 聚合的起点与终点
1. 集合特性
2. 资源库与数据访问层的区别
3. 资源库的误解
4. 资源库的实现要点
5. 案例:资源库的实现
6. 领域模型 VS数据模型
7. 案例:泛型资源库
实战 -任务分配执行系统 持久化
|
基于事件驱动的架构设计
|
|
十三、领域事件 – 保持最终一致性的信使
1. 领域事件是领域建模中极其重要的部分
2. 事务一致性,高并发下的窘境
3. 最终一致性,妥协带来高扩展性
4. 原则:一个事务中只对一个聚合进行修改
5. 案例:实现抽象事件源,发布事件源
6. 案例:实现抽象事件处理
7. 案例:实现领域事件的发布与订阅
8. 实战 -任务分配执行系统 任务分配领域逻辑
|
|
十四、微服务中基于事件的系统架构
1. 微服务之间如何稳健的发布与消费事件
2. 如何保证发布事件的原子性
3. 使用事件表发布事件
4. 案例:如何实现事件感知聚合根
5. 案例:如何实现事件感知资源库
6. 如何通过 AOP 进行通用的事件处理
|
|
十五、微服务形式下的CQRS
1. DDD中的典型写操作
2. 基于数据模型的读操作
3. 基于领域模型的读操作
4. 读写分离模型
5. 案例:电商系统中的读写分离场景
6. 单进程单实体 + 共享存储/共享模型:Inventory详情查询
7. 单进程单实体 + 共享存储/分离模型:Product摘要查询
8. 单进程跨实体 + 分离存储/分离模型:Product详情查询(包含Category信息)
9. 跨进程跨实体 + 分离存储/分离模型:Order详情查询(包含Product信息)
|
如果您想学习本课程,请
预约报名
如果没找到合适的课程或有特殊培训需求,请
订制培训
除培训外,同时提供相关技术咨询与技术支持服务,有需求请发需求表到邮箱soft@info-soft.cn,或致电4007991916
技术服务需求表点击在线申请
服务特点:
海量专家资源,精准匹配相关行业,相关项目专家,针对实际需求,顾问式咨询,互动式授课,案例教学,小班授课,实际项目演示,快捷高效,省时省力省钱。
专家力量:
中国科学院软件研究所,计算研究所高级研究人员
oracle,微软,vmware,MSC,Ansys,candence,Altium,达索等大型公司高级工程师,项目经理,技术支持专家
中科信软培训中心,资深专家或讲师
大多名牌大学,硕士以上学历,相关技术专业,理论素养丰富
多年实际项目经历,大型项目实战案例,热情,乐于技术分享
针对客户实际需求,案例教学,互动式沟通,学有所获