声明:本文档为开发需求规格说明书,内容由 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-001DR-AUTH-01注册接口 + UserMapper.insert
FR-AUTH-002DR-AUTH-02登录 + Session + 防重复登录
FR-AUTH-003DR-AUTH-03logout + WS 关闭
FR-AUTH-004DR-AUTH-04userInfo 网关逻辑
FR-USER-001DR-USER-01头像上传/访问
FR-FRIEND-001DR-FRIEND-01friendList
FR-FRIEND-002DR-FRIEND-02search/user
FR-FRIEND-003DR-FRIEND-03POST /friend/request
FR-FRIEND-004DR-FRIEND-04handle + 事务 + 推送
FR-SESSION-001DR-SESSION-01sessionList + 去重
FR-SESSION-002DR-SESSION-02POST /session
FR-CHAT-001DR-CHAT-01WebSocket 转发 + 落库
FR-CHAT-002DR-CHAT-02GET /message
FR-CHAT-003DR-CHAT-03client.js 未读
FR-SYS-001DR-SYS-01Registry + OnlineManager

3. 系统架构需求

3.1 总体架构(强制)

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

在这里插入图片描述

3.2 包结构规范(强制)

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

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

3.3 技术栈(强制)

技术版本/说明
Java1.8+
Spring Boot2.7.6
MyBatis Spring Boot2.3.0
MySQL8.x
WebSocketspring-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账号、密码、头像路径
好友关系frienduserId + friendId
好友请求friend_request发起人、接收人、理由、status
会话message_sessionsessionId、lastTime
会话成员message_session_usersessionId + userId
消息messagefromId、sessionId、content、postTime

4.2 数据规则(必须实现)

规则 ID规则关联 PRD
DATA-01好友建立后双向各存一条 friend(或查询等价)FR-FRIEND-004
DATA-02两人仅一个 canonical sessionId(取最小共有 sessionId)FR-CHAT-001
DATA-03发好友请求前校验:非本人、非好友、无 pendingFR-FRIEND-003
DATA-04搜索排除自己、好友、pending 相关用户FR-FRIEND-002
DATA-05历史消息:倒序取 100 条再反序返回FR-CHAT-002
DATA-06头像路径存 /avatars/{uuid}.extFR-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/loginDR-AUTH-02UserController → UserServiceImpl
POST/registerDR-AUTH-01同上
POST/logoutDR-AUTH-03同上
GET/userInfoDR-AUTH-04同上
POST/user/uploadAvatarDR-USER-01同上 + WebMvcConfig
GET/user/getAvatarDR-USER-01同上
GET/search/userDR-FRIEND-02同上
GET/friendListDR-FRIEND-01FriendController → FriendServiceImpl
GET/friend/request/listDR-FRIEND-04FriendRequestController
POST/friend/requestDR-FRIEND-03同上
POST/friend/handleDR-FRIEND-04同上,@Transactional
GET/sessionListDR-SESSION-01MessageSessionController
POST/sessionDR-SESSION-02同上
GET/messageDR-CHAT-02MessageController

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-01insert user;DuplicateKey → userId=0新用户可注册;重复名失败
DR-AUTH-02校验密码;Registry+Online 防重登双浏览器第二个登录失败
DR-AUTH-03invalidate session;logout WS退出后可再登录
DR-AUTH-04userInfo 无 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-01selectFriendList 双向与 db 测试数据一致
DR-FRIEND-02searchByKeyword 排除规则搜不到自己/好友
DR-FRIEND-03insert request + push FRIEND_REQUEST在线对方收到推送
DR-FRIEND-04accept:双向 friend + delete request + push;reject:delete同意后双方列表有对方

关键类FriendRequestServiceImplWebSocketPushService

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

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

关键类MessageSessionServiceImplChatMessageServiceImplWebSocketController

6.5 系统模块(DR-SYS)

DR 编号开发要求完成定义(DoD)
DR-SYS-01HTTP+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.readyDR-AUTH-04
WebSocketinitWebSocket、handleMessageDR-CHAT-01
发送initSendButtonDR-CHAT-01
好友getFriendList、clickFriendDR-FRIEND-01、DR-SESSION-02
会话getSessionList、clickSession、getHistoryMessageDR-SESSION-01、DR-CHAT-02
搜索searchUser、sendFriendRequestDR-FRIEND-02、03
好友请求loadPending、handle、modalDR-FRIEND-04
未读unreadCounts、incrementUnread、clearUnreadDR-CHAT-03
头像initAvatarUploadDR-USER-01
退出initLogoutButtonDR-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 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐