基于DDD的聊天系统设计

基于DDD的聊天系统设计 目录基于DDD的聊天系统一、领域上下文(限界上下文)核心域通用子域二、领域事件对话相关事件消息相关事件用户状态事件三、聚合根主要聚合根四、值对象标识符值对象业务值对象五、实体核心实体六、枚举类型状态枚举七、应用服务核心服务八、命令对象消息命令对话命令九、查询对象数据查询十、DTO(数据传输对象)响应DTO十一、业务规则权限规则时间规则十二、关键业务流程消息发送流程消息撤回流程用户连接流程十三、设计特点总结领域驱动设计特点聊天系统特性基于DDD的聊天系统战略设计(限界上下文划分)核心子域通用子域1. 核心域模型设计1.1 对话上下文 (Conversation Context)1.2 消息上下文 (Message Context)1.3 用户会话上下文2. 领域事件设计3. 应用服务4. 命令对象5. 查询对象6. 数据传输对象 (DTO)7. 实时连接管理8. 业务规则校验基于DDD的聊天系统一、领域上下文(限界上下文)核心域对话上下文 (Conversation Context)职责:对话的创建、管理、成员管理、设置配置核心模型:Conversation(聚合根)、Member、ConversationSettings业务能力:创建单聊/群聊、添加/移除成员、设置对话属性消息上下文 (Message Context)职责:消息的发送、撤回、状态管理、内容处理核心模型:Message(聚合根)、MessageContent、Attachment业务能力:发送消息、撤回消息、已读回执、表情回应用户会话上下文 (User Session Context)职责:用户连接状态管理、在线状态维护核心模型:UserSession业务能力:连接管理、心跳检测、会话维护实时推送上下文 (Realtime Push Context)职责:消息实时推送、连接管理核心模型:ConnectionManager、MessagePush业务能力:WebSocket连接、消息推送、连接状态同步通用子域用户身份上下文 (Identity Context)职责:用户认证、权限验证说明:通常由外部系统提供,如SSO、OAuth2文件存储上下文 (Storage Context)职责:附件上传、下载、存储管理核心模型:Attachment业务能力:文件上传、缩略图生成、存储管理通知上下文 (Notification Context)职责:离线消息推送、系统通知业务能力:推送通知、邮件通知、短信通知二、领域事件对话相关事件ConversationCreatedEvent​ - 对话创建事件触发时机:新对话创建时包含数据:对话ID、类型、创建者、初始成员MemberJoinedEvent​ - 成员加入事件触发时机:新成员加入对话时包含数据:对话ID、成员ID、邀请者、加入时间MemberLeftEvent​ - 成员离开事件触发时机:成员主动离开或被移除时包含数据:对话ID、成员ID、离开原因、操作者ConversationUpdatedEvent​ - 对话更新事件触发时机:对话标题、头像、设置变更时包含数据:对话ID、变更字段、变更值、操作者消息相关事件MessageSentEvent​ - 消息发送事件触发时机:消息成功发送时包含数据:消息ID、对话ID、发送者、消息类型MessageDeliveredEvent​ - 消息送达事件触发时机:消息成功送达接收者设备时包含数据:消息ID、接收者ID、设备ID、送达时间MessageReadEvent​ - 消息已读事件触发时机:消息被接收者阅读时包含数据:消息ID、对话ID、阅读者ID、阅读时间MessageRecalledEvent​ - 消息撤回事件触发时机:消息被撤回时包含数据:消息ID、对话ID、撤回者ID、撤回时间MessageReactionAddedEvent​ - 表情回应事件触发时机:用户对消息添加表情回应时包含数据:消息ID、对话ID、用户ID、表情符号用户状态事件UserConnectedEvent​ - 用户连接事件触发时机:用户成功建立连接时包含数据:用户ID、设备ID、设备类型、连接时间UserDisconnectedEvent​ - 用户断开连接事件触发时机:用户断开连接时包含数据:用户ID、连接ID、断开原因、断开时间TypingEvent​ - 用户输入状态事件触发时机:用户开始或停止输入时包含数据:对话ID、用户ID、是否正在输入、更新时间三、聚合根主要聚合根Conversation(对话聚合根)标识符:ConversationId包含实体:Member、ConversationMute业务规则:群聊最多500人只有群主/管理员可以修改群设置被禁言成员不能发送消息Message(消息聚合根)标识符:MessageId包含实体:Reaction、ReadReceipt业务规则:消息发送后2分钟内可撤回已删除的消息不能添加回应系统消息不能被撤回四、值对象标识符值对象ConversationId​ - 对话唯一标识MessageId​ - 消息唯一标识MemberId​ - 成员唯一标识ReactionId​ - 表情回应唯一标识业务值对象MessageContent​ - 消息内容包含:文本、附件列表、格式化信息Attachment​ - 附件信息包含:文件ID、URL、类型、大小、元数据ConversationSettings​ - 对话设置包含:权限设置、成员限制、通知设置GroupSettings​ - 群聊设置包含:邀请权限、修改权限、审批设置五、实体核心实体Member​ - 对话成员属性:用户ID、角色、加入时间、昵称、禁言时间Reaction​ - 表情回应属性:用户ID、表情符号、回应时间ReadReceipt​ - 已读回执属性:用户ID、阅读时间UserSession​ - 用户会话属性:设备ID、连接ID、连接时间、最后活动时间六、枚举类型状态枚举ConversationType​ - 对话类型SINGLE(单聊)、GROUP(群聊)、CHANNEL(频道)、SECRET(私密)MemberRole​ - 成员角色OWNER(群主)、ADMIN(管理员)、MEMBER(成员)、GUEST(访客)MessageType​ - 消息类型TEXT(文本)、IMAGE(图片)、VIDEO(视频)、AUDIO(音频)、SYSTEM(系统)MessageStatus​ - 消息状态SENDING(发送中)、SENT(已发送)、DELIVERED(已送达)、READ(已读)AttachmentType​ - 附件类型IMAGE(图片)、VIDEO(视频)、AUDIO(音频)、FILE(文件)SessionStatus​ - 会话状态CONNECTED(已连接)、CONNECTING(连接中)、DISCONNECTED(已断开)PushType​ - 推送类型NEW_MESSAGE(新消息)、MESSAGE_READ(消息已读)、USER_TYPING(用户输入)七、应用服务核心服务MessageApplicationService​ - 消息应用服务方法:sendTextMessage、sendFileMessage、recallMessageConversationApplicationService​ - 对话应用服务方法:createConversation、addMember、updateSettingsSessionApplicationService​ - 会话应用服务方法:connect、disconnect、heartbeat八、命令对象消息命令SendTextCommand​ - 发送文本消息命令SendFileCommand​ - 发送文件消息命令RecallMessageCommand​ - 撤回消息命令对话命令CreateGroupCommand​ - 创建群聊命令AddMemberCommand​ - 添加成员命令UpdateConversationCommand​ - 更新对话命令九、查询对象数据查询MessageQuery​ - 消息查询条件:对话ID、时间范围、发送者、消息类型ConversationQuery​ - 对话查询条件:用户ID、对话类型、关键词、未读状态