Files
zt-closet-backend/.codebuddy/plans/service-span-naming-dedupe_b2900987.md
T
2026-09-11 01:41:52 +08:00

5.5 KiB
Raw Blame History

name, overview, todos
name overview todos
service-span-naming-dedupe 将 service 层 span 名从 svc.<方法名> 统一改为 svc.<领域><方法名>,消除跨 service 的同名 span,使 span 名全局唯一、可按名过滤,并与 DAO 层 dao.<领域><动作> 命名风格对齐。
id content status
rename-clothes-outfit 替换 clothes.go、outfit.go 共 13 处 span 命名(Clothes/Outfit 领域前缀) completed
id content status
rename-closet-collect-like 替换 closet.go、collect.go、like.go 共 8 处 span 命名(ClosetShare/Collect/Like 领域前缀) completed
id content status
rename-notification-quota-user 替换 notification.go、quota.go、user.go 共 10 处 span 命名(Notification/Quota/User 领域前缀) completed
id content status
rename-goods-horoscope-order-airecommend 替换 goods.go、horoscope.go、order.go、airecommend.go 共 11 处 span 命名(Goods/Horoscope/Order/AIRecommend 领域前缀) completed
id content status dependencies
verify-build-vet 运行 go build ./... 与 go vet ./...,并搜索确认无裸 svc 方法名 span completed
rename-clothes-outfit
rename-closet-collect-like
rename-notification-quota-user
rename-goods-horoscope-order-airecommend

用户需求

将 service 层已埋设的 span 命名从 svc.<方法名> 调整为 svc.<领域名><方法名>,解决因多个 service 存在同名方法而导致的 span 名重复问题(如 svc.Create、svc.List、svc.GetByUUID),使每个 span 名全局唯一、可精确过滤与区分业务归属。

功能内容

  • 仅修改 global.Tracer.Start(ctx, "svc.Xxx") 中的 span 名字符串,不改变业务逻辑、方法签名、import 或返回类型。
  • 领域名取 Service 结构体名去掉 Service 后缀,与 DAO 层 dao.ClothesCreate、dao.OutfitCreate 的「领域名 + 动作」驼峰命名风格保持一致。
  • 覆盖 12 个 service 文件、共 42 处 span。

技术栈

  • 语言:Go
  • 可观测:OpenTelemetry Trace(global.Tracer.Start)
  • 改动性质:纯字符串替换,无新增依赖、无结构变更

实现方案

命名规则

  • 领域名 = Service 结构体名去掉 Service 后缀:
  • ClothesService → Clothes
  • OutfitService → Outfit
  • ClosetShareService → ClosetShare
  • CollectService → Collect
  • LikeService → Like
  • NotificationService → Notification
  • QuotaService → Quota
  • UserService → User
  • GoodsService → Goods
  • HoroscopeService → Horoscope
  • OrderService → Order
  • AIRecommendService → AIRecommend
  • span 名 = svc. + 领域名 + 方法名,驼峰无分隔,与方法名大小写一致。

特殊处理

  • CollectService.Collect → svc.CollectCollect、LikeService.LikeCreate → svc.LikeLikeCreate,为「领域名 + 方法名」严格拼接导致的字面重复,但规则统一、机械可推导;本次不重命名方法本身。

实现细节

  • 仅替换 global.Tracer.Start(ctx, "svc.Xxx") 的第二个字符串参数。
  • 不改 import、不新增/删除 span、不调整方法体其他内容。
  • 每个文件内按方法逐一替换,保证 42 处全部覆盖。

目录结构

internal/service/
├── clothes.go       # [MODIFY] svc.Upload→svc.ClothesUpload、svc.ProcessImageAsync→svc.ClothesProcessImageAsync、svc.ProcessStatusGetByUUID→svc.ClothesProcessStatusGetByUUID、svc.GetByUUID→svc.ClothesGetByUUID、svc.UpdateByUUID→svc.ClothesUpdateByUUID、svc.DeleteByUUID→svc.ClothesDeleteByUUID、svc.List→svc.ClothesList(7 处)
├── outfit.go        # [MODIFY] svc.Create→svc.OutfitCreate、svc.GetByUUID→svc.OutfitGetByUUID、svc.UpdateByUUID→svc.OutfitUpdateByUUID、svc.List→svc.OutfitList、svc.Delete→svc.OutfitDelete、svc.Public→svc.OutfitPublic(6 处)
├── closet.go        # [MODIFY] svc.Create→svc.ClosetShareCreate、svc.Detail→svc.ClosetShareDetail、svc.List→svc.ClosetShareList、svc.Cancel→svc.ClosetShareCancel(4 处)
├── collect.go       # [MODIFY] svc.Collect→svc.CollectCollect、svc.List→svc.CollectList(2 处)
├── like.go          # [MODIFY] svc.LikeCreate→svc.LikeLikeCreate、svc.GetByTargetID→svc.LikeGetByTargetID(2 处)
├── notification.go  # [MODIFY] svc.List→svc.NotificationList、svc.GetByUUID→svc.NotificationGetByUUID、svc.Read→svc.NotificationRead、svc.Unread→svc.NotificationUnread(4 处)
├── quota.go         # [MODIFY] svc.InfoGetBySelf→svc.QuotaInfoGetBySelf、svc.FlowList→svc.QuotaFlowList(2 处)
├── user.go          # [MODIFY] svc.WxLogin→svc.UserWxLogin、svc.InfoGetBySelf→svc.UserInfoGetBySelf、svc.ProfileUpdate→svc.UserProfileUpdate、svc.RefreshToken→svc.UserRefreshToken(4 处)
├── goods.go         # [MODIFY] svc.GetByCode→svc.GoodsGetByCode、svc.List→svc.GoodsList(2 处)
├── horoscope.go     # [MODIFY] svc.GetToday→svc.HoroscopeGetToday(1 处)
├── order.go         # [MODIFY] svc.Create→svc.OrderCreate、svc.PayNotify→svc.OrderPayNotify、svc.Cancel→svc.OrderCancel、svc.List→svc.OrderList、svc.RefundApply→svc.OrderRefundApply、svc.RefundNotify→svc.OrderRefundNotify(6 处)
└── airecommend.go   # [MODIFY] svc.Create→svc.AIRecommendCreate、svc.Save→svc.AIRecommendSave(2 处)

验证方式

  • go build ./... 与 go vet ./... 通过。
  • 全项目搜索确认不再存在 "svc.Create"、"svc.List"、"svc.GetByUUID" 等裸方法名 span。