SecondGoodsService_拆分说明.md 9.8 KB

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. 创建商品(原有调用方式不变)

@Autowired
private SecondGoodsService secondGoodsService;

public void createGoods(SecondGoodsVo goodsVo) {
    // 内部会自动调用审核服务、通知服务等
    secondGoodsService.createBasicInfo(goodsVo, 0);
}

2. 查询商品列表(原有调用方式不变)

@Autowired
private SecondGoodsService secondGoodsService;

public IPage<SecondGoodsVo> searchGoods(SecondGoodsVo searchVo) {
    // 内部委托给查询服务
    return secondGoodsService.searchGoodsList(page, userId, searchVo);
}

3. 单独使用审核服务(新增能力)

@Autowired
private SecondGoodsAuditService auditService;

public void auditGoods(SecondGoods goods, SecondGoodsVo goodsVo) {
    // 可以单独调用审核服务
    auditService.performContentReview(goodsVo, goods);
}

4. 单独使用数据增强服务(新增能力)

@Autowired
private SecondGoodsDataEnricher dataEnricher;

public void enrichData(IPage<SecondGoodsVo> goodsList) {
    // 批量设置用户信息
    dataEnricher.batchSetSearchUserInfo(goodsList);
    // 批量设置图片信息
    dataEnricher.batchSetGoodsImages(goodsList);
}

兼容性说明

✅ 完全向后兼容

  • 所有原有的 SecondGoodsService 接口方法保持不变
  • 原有的 Controller 调用代码无需修改
  • 通过委托模式实现,对外接口完全一致

🔄 内部重构

  • 内部实现通过依赖注入和委托模式重构
  • 原有的私有方法被合理分配到各个服务中
  • 保持了原有的业务逻辑和数据流程

迁移步骤

1. 备份原文件

cp SecondGoodsServiceImpl.java SecondGoodsServiceImpl_backup.java

2. 替换为新文件

mv SecondGoodsServiceImpl_refactored.java SecondGoodsServiceImpl.java

3. 编译检查

mvn clean compile

4. 运行单元测试

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