声明:本文档为开发需求规格说明书,内容由 AI 辅助生成、博主整理优化,仅作本项目开发参考使用。


✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
🎯 你正在阅读「Java项目-轻聊」系列文章 🎯
✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨

🔥 弹简特 个人主页

❄️ 个人专栏直通车:


靠热爱去书写自己,靠勇敢去书写生活!
✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨


🌟 博主简介:


在这里插入图片描述


写在最前-项目同步码云

📦 项目源码 | 码云仓库


点击👉 点我看项目同步代码


轻聊 · 软件开发需求规格说明书(SRS)

属性 内容
文档编号 SRS-LIGHTCHAT-v1.0
产品名称 轻聊 V1.0
文档版本 V1.0
文档状态 已定稿
撰写角色 弹简特
目标读者 后端、前端
需求基线 PRD-产品需求文档 V1.0(不得偏离 P0 需求

1. 文档目的与适用范围

1.1 目的

PRD 中的业务需求转化为可开发、可评审、可估时的技术需求,包括:

  • 系统架构与分层约束
  • 数据模型与业务规则实现
  • 接口与协议实现要求
  • 模块任务分解与完成定义

2. 需求追溯关系

PRD(业务需求 FR-*)
    ↓ 拆解
SRS(技术需求 DR-* + 实现约束)
    ↓ 实现
源代码 + 02-接口文档
    ↓ 验证
TRS(测试用例 TC-*)
PRD 编号 SRS 开发需求编号 主要交付
FR-AUTH-001 DR-AUTH-01 注册接口 + UserMapper.insert
FR-AUTH-002 DR-AUTH-02 登录 + Session + 防重复登录
FR-AUTH-003 DR-AUTH-03 logout + WS 关闭
FR-AUTH-004 DR-AUTH-04 userInfo 网关逻辑
FR-USER-001 DR-USER-01 头像上传/访问
FR-FRIEND-001 DR-FRIEND-01 friendList
FR-FRIEND-002 DR-FRIEND-02 search/user
FR-FRIEND-003 DR-FRIEND-03 POST /friend/request
FR-FRIEND-004 DR-FRIEND-04 handle + 事务 + 推送
FR-SESSION-001 DR-SESSION-01 sessionList + 去重
FR-SESSION-002 DR-SESSION-02 POST /session
FR-CHAT-001 DR-CHAT-01 WebSocket 转发 + 落库
FR-CHAT-002 DR-CHAT-02 GET /message
FR-CHAT-003 DR-CHAT-03 client.js 未读
FR-SYS-001 DR-SYS-01 Registry + OnlineManager

3. 系统架构需求

3.1 总体架构(强制)

采用 B/S、三层架构 + WebSocket

在这里插入图片描述

3.2 包结构规范(强制)

层级 包路径 职责
控制层 controller 接参、Session、调 Service、返回
入参 DTO controller.param WS 消息体、通知对象
服务层 service / service.impl 业务逻辑、事务
内部 DTO service.dto LoginResult、ServiceResult
持久层实体 dao.dataobject 表映射实体
持久层接口 dao.mapper MyBatis Mapper
组件 component 跨模块基础设施
配置 config Spring 配置类

禁止:Controller 直接调用 Mapper(除极特殊工具类)。

3.3 技术栈(强制)

技术 版本/说明
Java 1.8+
Spring Boot 2.7.6
MyBatis Spring Boot 2.3.0
MySQL 8.x
WebSocket spring-boot-starter-websocket
前端 HTML + jQuery 2.x + 原生 WebSocket API
构建 Maven

3.4 运行环境

要求
服务端口 8080
数据库 web_chatroom,脚本 src/main/java/db.sql
头像存储 {user.dir}/upload/avatars
配置 application.yml

4. 数据需求

4.1 逻辑模型

实体 表名 说明
用户 user 账号、密码、头像路径
好友关系 friend userId + friendId
好友请求 friend_request 发起人、接收人、理由、status
会话 message_session sessionId、lastTime
会话成员 message_session_user sessionId + userId
消息 message fromId、sessionId、content、postTime

4.2 数据规则(必须实现)

规则 ID 规则 关联 PRD
DATA-01 好友建立后双向各存一条 friend(或查询等价) FR-FRIEND-004
DATA-02 两人仅一个 canonical sessionId(取最小共有 sessionId) FR-CHAT-001
DATA-03 发好友请求前校验:非本人、非好友、无 pending FR-FRIEND-003
DATA-04 搜索排除自己、好友、pending 相关用户 FR-FRIEND-002
DATA-05 历史消息:倒序取 100 条再反序返回 FR-CHAT-002
DATA-06 头像路径存 /avatars/{uuid}.ext FR-USER-001

4.3 MyBatis 配置要求

mybatis:
  mapper-locations: classpath:mapper/**/*Mapper.xml
  type-aliases-package: com.zhongge.web_chatroom.dao.dataobject

启动类:@MapperScan("com.zhongge.web_chatroom.dao.mapper")


5. 接口与协议开发需求

项目接口文档详细见 【Java项目-轻聊】05-AI赋能设计接口文档。本章规定实现级要求。

5.1 HTTP 通用

要求
认证 HttpSession,属性名 user,类型 User
登录接口 成功返回 userId>0;密码字段恒 ""
业务失败 好友等模块 { ok: false, message: "..." }
上传 multipart/form-data,字段 fileuserId

5.2 接口清单与开发任务

方法 路径 DR 编号 实现类
POST /login DR-AUTH-02 UserController → UserServiceImpl
POST /register DR-AUTH-01 同上
POST /logout DR-AUTH-03 同上
GET /userInfo DR-AUTH-04 同上
POST /user/uploadAvatar DR-USER-01 同上 + WebMvcConfig
GET /user/getAvatar DR-USER-01 同上
GET /search/user DR-FRIEND-02 同上
GET /friendList DR-FRIEND-01 FriendController → FriendServiceImpl
GET /friend/request/list DR-FRIEND-04 FriendRequestController
POST /friend/request DR-FRIEND-03 同上
POST /friend/handle DR-FRIEND-04 同上,@Transactional
GET /sessionList DR-SESSION-01 MessageSessionController
POST /session DR-SESSION-02 同上
GET /message DR-CHAT-02 MessageController

5.3 WebSocket 协议(DR-CHAT-01)

要求
端点 ws://{host}:8080/WebSocketMessage
握手 HttpSessionHandshakeInterceptor,user 写入 WS attributes
客户端上行 {"type":"message","sessionId":n,"content":"..."}
服务端下行-聊天 type=message,含 fromId/fromName/content/sessionId/sessionName/avatarPath
服务端下行-好友 type=FRIEND_REQUEST / FRIEND_ACCEPTED
在线管理 OnlineUserManager.putIfAbsent,重复连接关闭新连接
业务类 ChatMessageServiceImpl.transferMessage

6. 模块开发需求详述

6.1 认证模块(DR-AUTH)

DR 编号 开发要求 完成定义(DoD)
DR-AUTH-01 insert user;DuplicateKey → userId=0 新用户可注册;重复名失败
DR-AUTH-02 校验密码;Registry+Online 防重登 双浏览器第二个登录失败
DR-AUTH-03 invalidate session;logout WS 退出后可再登录
DR-AUTH-04 userInfo 无 session 返回空 user 未登录打不开主界面

关键类UserServiceImplUserSessionRegistryOnlineUserManagerUserHttpSessionListener

6.2 头像模块(DR-USER)

DR 编号 开发要求 完成定义(DoD)
DR-USER-01 校验格式/2MB;transferTo 至 upload/avatars;updateAvatarPath;资源映射 /avatars/** 上传后可 URL 访问;getAvatar 有默认图

关键类AvatarPropertiesWebMvcConfigUserServiceImpl

6.3 好友模块(DR-FRIEND)

DR 编号 开发要求 完成定义(DoD)
DR-FRIEND-01 selectFriendList 双向 与 db 测试数据一致
DR-FRIEND-02 searchByKeyword 排除规则 搜不到自己/好友
DR-FRIEND-03 insert request + push FRIEND_REQUEST 在线对方收到推送
DR-FRIEND-04 accept:双向 friend + delete request + push;reject:delete 同意后双方列表有对方

关键类FriendRequestServiceImplWebSocketPushService

6.4 会话与消息模块(DR-SESSION / DR-CHAT)

DR 编号 开发要求 完成定义(DoD)
DR-SESSION-01 组装 MessageSession 列表 + pickBetterSession 去重 同好友不出现两条
DR-SESSION-02 getSessionIdByUserPair 或新建 重复创建返回同一 id
DR-CHAT-01 WS 转发 + messageMapper.add + canonical session 双人实时互发;DB 有记录
DR-CHAT-02 历史 100 条正序 刷新后仍在
DR-CHAT-03 client.js unreadCounts 符合 PRD FR-CHAT-003

关键类MessageSessionServiceImplChatMessageServiceImplWebSocketController

6.5 系统模块(DR-SYS)

DR 编号 开发要求 完成定义(DoD)
DR-SYS-01 HTTP+WS 单点策略一致 TRS 场景 S02 通过

7. 前端开发需求

7.1 页面与资源

文件 职责
login.html / register.html 认证页,jQuery ajax
client.html 主界面 DOM
client.js 全部业务交互(作者实现)
css/*.css 样式(可 AI 辅助,需与 DOM 一致)

7.2 client.js 功能模块

模块 函数区 对应 DR
初始化 getUserInfo、document.ready DR-AUTH-04
WebSocket initWebSocket、handleMessage DR-CHAT-01
发送 initSendButton DR-CHAT-01
好友 getFriendList、clickFriend DR-FRIEND-01、DR-SESSION-02
会话 getSessionList、clickSession、getHistoryMessage DR-SESSION-01、DR-CHAT-02
搜索 searchUser、sendFriendRequest DR-FRIEND-02、03
好友请求 loadPending、handle、modal DR-FRIEND-04
未读 unreadCounts、incrementUnread、clearUnread DR-CHAT-03
头像 initAvatarUpload DR-USER-01
退出 initLogoutButton DR-AUTH-03

7.3 前端约束

  • WebSocket 地址须与部署主机一致(默认 127.0.0.1:8080)。
  • 所有需登录接口依赖 Cookie 自动携带。
  • 发送消息前校验已选会话且 sessionId 存在。

8. 非功能开发需求

编号 要求
NFR-DEV-01 核心业务方法需有清晰日志(便于实训调试)
NFR-DEV-02 好友同意等写操作使用 @Transactional
NFR-DEV-03 代码分层符合第 3 章,Code Review 按 SRS 检查
NFR-DEV-04 不提交 upload/avatars 下用户文件到 Git(.gitignore)

OK,老铁们,了解完咱们的开发需求文档之后,下一期我们就开始实现我们的项目了,我们从设计数据库和设计接口文档开始~

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐