欢迎大家关注公众号「JAVA前线」查看更多精彩分享文章,主要包括源码分析、实际应用、架构思维、职场分享、产品思考等等,同时欢迎大家加我微信「java_front」一起交流学习
0 文章前言
我在之前文章《结合DDD讲清楚编写技术方案七大维度》介绍了从零到一使用DDD方法论搭建项目的七个步骤:
- 四色分领域
- 用例看功能
- 流程三剑客
- 领域与数据
- 纵横做设计
- 分层看架构
- 接口看对接
四色分领域:四色分析法将一个整体需求拆分为不同领域,这是DDD方法论核心思想。四色分析法同样可以用在子域或者限界上下文中,直到拆分出可以得心应手处理之边界为止。
用例看功能:当领域划分完成后,使用用例图描述系统功能。用例图不关心实现细节,而是从外部视角描述系统功能,即使不了解实现细节的人,通过用例图也可以快速了解系统功能。
流程三剑客:使用活动图、顺序图、状态机图三种流程类型的图示描述系统,三种图各有特点:活动图着重描述逻辑分支,顺序图着重描述时间线索,状态机图着重描述状态流转。
领域与数据:如何区分领域模型和数据模型。二者重要区别是值对象存储方式。领域模型在包含值对象的同时也保留了值对象的业务含义,而数据模型可以使用更加松散的结构保存值对象,简化数据库设计。
纵横做设计:纵向做隔离,横向做编排。复杂业务之所以复杂,一个重要原因是涉及角色或者类型较多,很难平铺直叙地进行设计,所以我们需要增加分析维度。其中最常见的是增加横向和纵向两个维度。
分层看架构:系统架构分为两个层次,第一种层次指本项目在整个公司位于哪一层次。持久层、缓存层、中间件、业务中台、服务层、网关层、客户端和代理层是常见的分层架构。第二种层次指本项目内部代码组织方式,一般可以分为接口层,访问层,业务层,领域层,整合层和基础层。
接口看对接:一个接口代码编写完成后,这个接口如何调用,输入和输出参数是什么,这些问题需要在接口文档中得到回答。
上述步骤如何落地为技术方案,这是本文需要回答之问题。本文重点分析技术方案章节,每个章节具体实践文末参看我之前文章链接。
1 需求分析
1.1 需求文档
本章节记录需求文档地址
1.2 需求背景
- 当前业务现状
- 本次需求内容
- 本次需求目标
2 概要设计
2.1 领域划分
本章节使用四色分析法划分领域
2.2 系统功能
本章节使用用例图描述系统功能
3 详细设计
3.1 流程视图
3.1.1 整体流程
本章节使用时序图描述整体流程
- 顺序维度:正向、逆向
- 调用方式:同步、异步
时序图应该着眼全局
不应过多描述复杂逻辑分支
如果有需要可以根据不同维度画多张图
3.1.2 复杂流程
本章节使用活动图描述复杂逻辑分支
如果有需要可以结合多维表格分析
3.1.3 状态流转
本章节使用状态机图描述状态流转
3.2 数据视图
3.2.1 关系模型
本章节使用ER图描述实体关系模型
3.2.2 数据库表
本章节描述建库建表语句:
- 创建语句
- 索引语句
- 初始化语句
3.3 接口视图
本章节描述与前端交互接口信息:
- 接口路径
- 输入参数
- 输出参数
- 接口说明
- 老版本兼容性
4 非功能设计
4.1 安全设计
- 常见安全维度
- 系统安全
- 数据安全
- 业务安全
- 常见安全操作
- 校验操作权限
- 记录操作流水
- 记录业务快照
- 敏感字段不依赖前端(userId、金额)
4.2 性能设计
- 性能分析
- RT
- QPS
- 并发
- 压测
- 优化层级
- 数据层
- 缓存层
- 服务层
- 前端层
- 客户端
- 代理层
- 常用方法
- 减少请求
- 空间换时间
- 任务并行化
- 任务异步化
4.3 扩展性设计
- 数据表设计
- 二进制字段
- extend1、extend2
- bizType、bizSubType
- 接口设计
- bizType、bizSubType
- 松散参数
- 版本号
- 代码设计
- 设计模式
- 纵向做隔离
- 横向做编排
4.4 高可用设计
- 降级策略
- 延时策略
- 隔离策略
- 冗余策略
- 告警策略
- 系统错误(一次立刻感知)
- 业务错误(一定频次感知)
- 数据监控(数据异常感知)
5 项目排期
本章节使用表格记录负责人和排期:
- 端信息
- 服务端
- 客户端
- 前端
- 测试
- 项目经理
- 产品经理
- 表格内容
- 哪个端
- 负责人
- 开始时间
- 结束时间
- 是否完成
- 风险信息
- 备注信息
- 上线准备
6 文章总结
本文展示了一篇技术方案需要具备的章节,需要说明根据需求复杂度,并不是所有章节都必须。如果一个需求复杂度不高,可以只选取其中几个章节。在《结合DDD讲清楚编写技术方案七大维度》文章有上述章节中各种图实例,希望本文对大家有所帮助。
7 延伸阅读
欢迎大家关注公众号「JAVA前线」查看更多精彩分享文章,主要包括源码分析、实际应用、架构思维、职场分享、产品思考等等,同时欢迎大家加我微信「java_front」一起交流学习