# SecondGoodsServiceImpl 类拆分说明文档 ## 拆分概述 原 `SecondGoodsServiceImpl` 类有 **2164行代码**,职责过多,违反单一职责原则。现已按功能模块拆分为 **6个独立服务类**。 ## 拆分后的类结构 ### 1. **SecondGoodsServiceImpl** (重构后的主类) - **文件路径**: `alien-second/src/main/java/shop/alien/second/service/impl/SecondGoodsServiceImpl.java` - **代码行数**: 约 750 行(从 2164 行减少到 750 行) - **核心职责**: - 商品基本 CRUD 操作 - 草稿保存 (`saveAsDraft`) - 创建商品基本信息 (`createBasicInfo`) - 商品上下架 (`shelveSecondGoods`) - 风控检查 (`checkUserPublishLimit`, `checkUserPublishSameCategoryLimit`) - 操作历史记录 (`recordGoodsOperation`) - 图片管理 (`saveStoreImages`) - 批量下架 (`batchShelveGoodsByIds`) - **依赖注入**: 其他拆分出的服务类 - **委托模式**: 将查询、审核、管理后台等请求委托给对应的服务 ### 2. **SecondGoodsAuditService** (商品审核服务) - **接口**: `shop.alien.second.service.SecondGoodsAuditService` - **实现类**: `shop.alien.second.service.impl.SecondGoodsAuditServiceImpl` - **代码行数**: 约 480 行 - **核心职责**: - 图片审核 (`performImageReviews`) - 文本审核 (`performTextReview`) - 视频审核 (`performVideoReviews`) - 视频审核结果处理 (`processVideoModerationResult`) - 审核通过后上架 (`approveAndListGoods`) - 创建审核记录 (`createGoodsAudit`) - 视频URL提取 (`extractVideoUrls`) - 解析视频审核失败原因 (`parseVideoModerationFailureReason`) - **依赖服务**: - `VideoModerationService` (视频审核) - `TextModerationUtil` (文本审核) - `ImageModerationUtil` (图片审核) - `SecondGoodsNotificationService` (消息通知) ### 3. **SecondGoodsQueryService** (商品查询服务) - **接口**: `shop.alien.second.service.SecondGoodsQueryService` - **实现类**: `shop.alien.second.service.impl.SecondGoodsQueryServiceImpl` - **代码行数**: 约 420 行 - **核心职责**: - 热销商品列表 (`getHotSellingRanking`, `getHotSellingRankingTop10`) - 收藏商品列表 (`getCollectGoodsPage`, `getCollectTop10`) - 商品搜索 (`searchGoodsList`) - 商品详情 (`getSecondGoodsById`) - 屏蔽商品列表 (`getShieldedGoodsPage`, `getShieldedGoodsListByType`) - 购买商品列表 (`getBuyGoodsPage`) - 出售商品列表 (`getSellGoodsPage`) - 用户商品列表 (`getUserGoodsPage`) - 我的商品列表 (`getMyGoodsPage`) - 草稿列表 (`getDraftList`) - 点赞商品列表 (`getLikeGoodsPage`) - 交易列表 (`getTransactionList`) - 根据用户ID和状态查询 (`getGoodsListByUserId`) - **依赖服务**: - `SecondGoodsDataEnricher` (数据增强) ### 4. **SecondGoodsAdminService** (管理后台服务) - **接口**: `shop.alien.second.service.SecondGoodsAdminService` - **实现类**: `shop.alien.second.service.impl.SecondGoodsAdminServiceImpl` - **代码行数**: 约 450 行 - **核心职责**: - 管理后台商品详情 (`getAdminGoodsDetail`) - 操作记录详情 (`getAdminGoodsRecordDetail`) - 处理商品信息 (`dealSecondGoodsInfo`) - 处理商品记录信息 (`dealSecondGoodsRecordInfo`) - 管理后台商品列表 (`getAdminGoodsList`) - 转换举报信息 (`convertReportsToVos`) - 处理举报凭证图片 (`processReportImages`) - **依赖服务**: - `PlatformSecondTradeService` (交易服务) - `SecondGoodsDataEnricher` (数据增强) ### 5. **SecondGoodsNotificationService** (消息通知服务) - **接口**: `shop.alien.second.service.SecondGoodsNotificationService` - **实现类**: `shop.alien.second.service.impl.SecondGoodsNotificationServiceImpl` - **代码行数**: 约 140 行 - **核心职责**: - 发送审核成功消息 (`sendMessage`) - 发送审核失败消息 (`sendFailedMsg`) - 发送商品下架消息 (`sendShelveMessage`) - 发送通知消息 (`sendNotice` - 私有方法) - **依赖服务**: - `AlienStoreFeign` (Feign调用) ### 6. **SecondGoodsDataEnricher** (数据增强服务) - **接口**: `shop.alien.second.service.SecondGoodsDataEnricher` - **实现类**: `shop.alien.second.service.impl.SecondGoodsDataEnricherImpl` - **代码行数**: 约 260 行 - **核心职责**: - 批量设置用户信息 (`batchSetSearchUserInfo`, `batchSetSellUserInfo`) - 批量设置商品图片 (`batchSetGoodsImages`, `batchSetGoodsImagesForAdmin`) - 批量设置收藏状态 (`batchSetCollectStatus`) - 批量设置点赞状态 (`batchSetLikeStatus`) - 通用批量设置用户信息 (`batchSetUserInfo` - 私有泛型方法) - **依赖服务**: 无外部服务依赖,仅依赖 Mapper ## 拆分优势 ### 1. **单一职责原则 (SRP)** 每个服务类只负责一个明确的业务领域: - 审核服务只管审核 - 查询服务只管查询 - 通知服务只管通知 - 数据增强只管批量数据处理 ### 2. **代码可维护性提升** - 原来 2164 行的巨型类拆分为 6 个平均 300-500 行的小类 - 每个类职责清晰,易于理解和修改 - 减少了代码冲突的可能性 ### 3. **可测试性增强** - 每个服务可以独立进行单元测试 - 依赖注入使得 Mock 测试更加容易 - 测试范围更聚焦,测试用例更简洁 ### 4. **代码复用性提高** - 数据增强服务 (`SecondGoodsDataEnricher`) 可被多个服务复用 - 通知服务可以在不同场景下独立使用 - 审核服务可以扩展到其他业务模块 ### 5. **扩展性更好** - 新增审核规则只需修改审核服务 - 新增查询接口只需修改查询服务 - 不会影响其他服务的稳定性 ### 6. **性能优化空间** - 数据增强服务使用批量查询,减少数据库交互 - 查询服务可以独立添加缓存策略 - 审核服务可以独立进行异步优化 ## 依赖关系图 ``` SecondGoodsServiceImpl (主服务) ├── SecondGoodsAuditService (审核服务) │ └── SecondGoodsNotificationService (通知服务) ├── SecondGoodsQueryService (查询服务) │ └── SecondGoodsDataEnricher (数据增强服务) ├── SecondGoodsAdminService (管理后台服务) │ └── SecondGoodsDataEnricher (数据增强服务) └── SecondGoodsNotificationService (通知服务) ``` ## 使用示例 ### 1. 创建商品(原有调用方式不变) ```java @Autowired private SecondGoodsService secondGoodsService; public void createGoods(SecondGoodsVo goodsVo) { // 内部会自动调用审核服务、通知服务等 secondGoodsService.createBasicInfo(goodsVo, 0); } ``` ### 2. 查询商品列表(原有调用方式不变) ```java @Autowired private SecondGoodsService secondGoodsService; public IPage searchGoods(SecondGoodsVo searchVo) { // 内部委托给查询服务 return secondGoodsService.searchGoodsList(page, userId, searchVo); } ``` ### 3. 单独使用审核服务(新增能力) ```java @Autowired private SecondGoodsAuditService auditService; public void auditGoods(SecondGoods goods, SecondGoodsVo goodsVo) { // 可以单独调用审核服务 auditService.performContentReview(goodsVo, goods); } ``` ### 4. 单独使用数据增强服务(新增能力) ```java @Autowired private SecondGoodsDataEnricher dataEnricher; public void enrichData(IPage goodsList) { // 批量设置用户信息 dataEnricher.batchSetSearchUserInfo(goodsList); // 批量设置图片信息 dataEnricher.batchSetGoodsImages(goodsList); } ``` ## 兼容性说明 ### ✅ 完全向后兼容 - 所有原有的 `SecondGoodsService` 接口方法保持不变 - 原有的 Controller 调用代码无需修改 - 通过委托模式实现,对外接口完全一致 ### 🔄 内部重构 - 内部实现通过依赖注入和委托模式重构 - 原有的私有方法被合理分配到各个服务中 - 保持了原有的业务逻辑和数据流程 ## 迁移步骤 ### 1. 备份原文件 ```bash cp SecondGoodsServiceImpl.java SecondGoodsServiceImpl_backup.java ``` ### 2. 替换为新文件 ```bash mv SecondGoodsServiceImpl_refactored.java SecondGoodsServiceImpl.java ``` ### 3. 编译检查 ```bash mvn clean compile ``` ### 4. 运行单元测试 ```bash mvn test ``` ### 5. 集成测试 - 测试商品创建流程 - 测试商品查询流程 - 测试商品审核流程 - 测试管理后台功能 ## 注意事项 ### ⚠️ 循环依赖处理 - `SecondGoodsAuditService` 需要调用 `SecondGoodsService.recordGoodsOperation()` - 使用 `@Autowired` 延迟注入避免循环依赖 - 已在 `SecondGoodsAuditServiceImpl` 中正确处理 ### ⚠️ 事务处理 - 原有的事务注解保持不变 - 跨服务调用时注意事务传播 - 建议在 Controller 层或主服务层添加 `@Transactional` ### ⚠️ 日志记录 - 每个服务都使用 `@Slf4j` 注解 - 保持了原有的日志级别和格式 - 便于问题定位和排查 ## 性能影响评估 ### ✅ 无负面影响 - 委托调用仅增加一层方法调用,性能影响可忽略不计 - 批量查询优化反而提升了性能 - 代码结构优化有利于JVM的内联优化 ### 🚀 潜在优化点 - 查询服务可以独立添加 Redis 缓存 - 审核服务可以改为异步处理 - 数据增强服务可以使用并行流优化 ## 后续优化建议 ### 1. 缓存优化 - 在 `SecondGoodsQueryService` 中添加 Redis 缓存 - 缓存热门商品、收藏商品等查询结果 ### 2. 异步处理 - 审核服务改为异步 + MQ 模式 - 通知服务改为异步发送 ### 3. 配置外部化 - 审核规则配置化(目前部分硬编码) - 风控阈值配置化(已通过 `RiskControlProperties` 实现) ### 4. 监控和告警 - 添加审核失败率监控 - 添加查询性能监控 - 添加风控触发告警 ## 联系方式 如有问题或建议,请联系开发团队。 --- **文档版本**: 1.0 **创建日期**: 2025-11-07 **最后更新**: 2025-11-07