LLD文档核心:从模块设计到落地开发
LLD 输出即详细设计文档(Low-Level Design Document) 的交付成果,是衔接概要设计(HLD)与编码 / 开发实现的核心文档,核心作用是明确系统各模块的 “具体怎么做”,为开发、测试、运维提供可落地的技术指南。
一、LLD 输出的核心内容模块
LLD 输出需覆盖 “模块细节、交互逻辑、技术规范” 三大维度,每个模块需包含以下关键信息:
1. 模块概述与定位
- 明确模块的核心功能(如 “用户认证模块:负责账号登录、Token 生成与验证”)。
- 说明模块在整体系统中的位置(如 “属于用户中心子系统,上游对接前端登录页,下游关联用户数据库”)。
- 标注模块的性能目标(如 “支持每秒 1000 次登录请求,响应延迟≤50ms”)与依赖项(如 “依赖 Redis 缓存、MySQL 用户表”)。
2. 接口设计(对内 / 对外)
需精确到 “字段级”,避免模糊描述,通常包含:
- 接口定义:接口名称(如
userLogin)、唯一标识(如接口 ID:USER-API-001)、调用方式(GET/POST)。 - 参数说明:请求参数(名称、类型、是否必填、默认值、校验规则,如 “username:String,必填,长度 1-20 位”)、响应参数(成功 / 失败返回格式,含错误码定义,如 “code:200 = 成功,401 = 账号不存在”)。
- 协议与格式:通信协议(HTTP/HTTPS、TCP)、数据格式(JSON/ProtoBuf)、接口超时时间(如 “3 秒超时,重试 1 次”)。
3. 数据设计
- 数据结构:模块内部使用的结构体 / 类定义(如 Java 的 POJO、C++ 的 Struct),明确字段名称、类型、长度、约束(如 “User 类:userId(Long,主键)、password(String,加密存储,长度 32 位 MD5)”)。
- 数据库设计:表结构(表名、字段名、数据类型、主键、外键、索引)、SQL 脚本(建表语句、初始化数据脚本);若用 NoSQL,需说明集合 / Key 设计(如 Redis 的 Key 格式:
user:token:{tokenId})。 - 数据流转:模块内数据的传递路径(如 “登录请求→参数校验→数据库查账号→密码加密比对→生成 Token→返回响应”),可用流程图辅助。
4. 业务逻辑实现细节
- 核心流程:拆分模块的关键业务步骤,标注分支逻辑(如 “登录逻辑:1. 校验用户名格式;2. 查数据库是否存在该用户;3. 存在则比对密码,不存在返回 401;4. 密码正确则生成 Token,错误返回 403”)。
- 异常处理:明确异常场景及处理方式(如 “数据库连接失败:触发重试机制,重试 3 次失败后返回 500 错误,并记录日志到 ELK”)。
- 边界条件:覆盖极端场景(如 “用户输入空密码、Token 过期、并发登录冲突”)的处理规则。
5. 技术选型与规范
- 技术栈细节:具体框架、工具、版本(如 “后端用 Spring Boot 2.7.x,缓存用 Redis 6.2.x,加密算法用 BCrypt”)。
- 编码规范:命名规则(如 “接口方法名用驼峰式,数据库表名用下划线式”)、日志规范(如 “ERROR 级日志记录异常栈,INFO 级记录关键业务操作”)。
- 性能与安全设计:性能优化手段(如 “登录结果缓存 10 分钟,减少数据库查询”)、安全措施(如 “密码不明文存储、接口防 SQL 注入、Token 防篡改”)。
二、LLD 输出的关键要求
- 可落地性:细节需足够具体,开发人员无需额外猜测(如 “不写‘加密密码’,而写‘用 BCrypt 算法加密,盐值长度 10 位’”)。
- 一致性:需与概要设计(HLD)的模块划分、功能范围一致,接口设计需与上下游模块对齐(如 “用户认证模块的 Token 格式,需符合下游订单模块的 Token 校验规则”)。
- 可追溯性:每个设计点需对应需求文档(PRD)的需求 ID(如 “‘支持手机号登录’对应 PRD 需求 ID:REQ-USER-002”),便于后续需求变更追踪。
- 可测试性:明确模块的测试要点(如 “测试点 1:用户名不存在时返回 401;测试点 2:密码错误时返回 403”),为测试用例设计提供依据。
三、LLD 输出的常见交付形式
- 核心文档:以 Word/Markdown/PDF 格式呈现,结构清晰,包含上述所有模块内容。
- 配套产出:
- 图形化文件:接口时序图(用 PlantUML/DrawIO 绘制)、数据流程图、类图。
- 技术脚本:数据库建表 SQL、初始化脚本、配置文件(如 application.yml)示例。
- 评审记录:LLD 需经过开发、测试、架构师评审,输出评审意见及修改记录,作为文档附件。
