Clipping 微信公众号

1个场景(618促销)5种范式(Spec-Vibe-Glue-TDD-Harness) ,企业级AI Coding经验分享(附代码示例)

by 吕昭波 原文 ↗
Created: 2026-05-10

公众号名称:沐然云计算

作者名称:吕昭波

发布时间:2026-05-10 00:25

《企业级AI Coding成熟度模型》V1.0发布

核心观点速览

在618促销这样的大型项目中,我们通过实战验证了五种研发范式的价值,核心发现如下:

1. 范式无优劣,场景定选择

Spec Coding重文档、TDD重质量、Glue Coding重效率、Harness重交付、Vibe Coding重体验,没有绝对的好坏之分。

2. 资产复用是效率关键

复用春节促销和周年庆的Reference代码,618核心功能开发周期缩短60%,代码复用率达70%。

3. 规范先行保障质量

遵循AGENTS.md规范(命名、日志、异常处理),确保代码风格统一,降低维护成本。

4. 组合使用效果最佳

不同阶段采用不同范式:Spec Coding定需求、TDD保核心、Glue Coding提效率、Harness自动化、Vibe Coding优体验。

5. PM角色随范式调整

Spec Coding中PM主导需求,TDD中PM关注验收标准,Vibe Coding中PM聚焦用户体验。

6. 文档参考各有侧重

需求文档对应Spec Coding,测试文档对应TDD,Reference代码对应Glue Coding,部署文档对应Harness,设计稿对应Vibe Coding。

一、项目背景:站在巨人的肩膀上

在开始618促销开发之前,我们团队已经积累了丰富的技术资产,这为我们选择不同研发范式提供了坚实基础。

1.1 已有代码资产(Reference)

我们整理了去年春节促销和周年庆活动的核心代码:

Reference/
├── SpringFestivalPromotionService.java  # 春节促销服务
│   ├── processOrder()          # 处理订单优惠
│   ├── applyFullReduction()    # 满减计算
│   ├── checkGiftEligibility()  # 赠品资格判断
│   └── applyPointsMultiplier() # 积分翻倍
├── AnniversaryCouponService.java       # 周年庆优惠券服务
│   ├── distributeCoupons()      # 发放优惠券
│   ├── determineCouponAmount() # 按等级确定金额
│   └── batchDistribute()        # 批量发放
└── PromotionConfig.java                # 促销配置
    ├── springFestival           # 春节配置
    ├── anniversary              # 周年庆配置
    └── configMap               # 通用配置

1.2 研发规范(AGENTS.md)

项目已建立完善的研发规范:

规范类别内容
技术栈Spring Boot 2.7.18、MyBatis-Plus 3.5.3.1
代码规范使用@Slf4j日志、统一异常处理、事务管理
命名规范Service接口名、VO/DTO命名规则
永久红线禁止修改财务模块
验证命令Maven编译、JUnit测试、Checkstyle检查

1.3 项目架构信息

二、618大促需求分析

整个方案不涉及客户信息,所以,这些都是Mock数据,模拟促销信息。当然,为了更真实的Mock,还Mock了618促销需求讨论的邮件.md、会议纪要.md。

所以,在这里我们重点关注中间的逻辑,而非具体需求或者功能本身。

2.1 核心需求

基于现有资产,我们需要实现:

  1. 1. 优惠券系统:用户领取、使用优惠券(可复用周年庆代码)

  2. 2. 满减优惠:满300减50(可复用春节满减逻辑)

  3. 3. 限时抢购:新增功能

  4. 4. 积分翻倍:可复用春节积分逻辑

2.2 技术要求

  • 高并发:支持每秒10万级请求
  • 高可用:系统可用性99.9%以上
  • 数据一致性:库存扣减、优惠券核销必须准确
  • 快速迭代:两周内完成开发和测试

三、多种研发范式实战

3.1 Spec Coding:文档先行,规范驱动

核心思想:先写完整的需求文档和设计规范,再严格按照文档进行代码实现。

切入点

从需求分析开始,结合现有Reference代码,明确”做什么”和”怎么做”。

实战过程

第一步:编写Spec文档(参考已有资产)

我们基于AGENTS.md规范编写了14份Spec文档:

01-Spec写作总则与文档编号索引.md
02-需求来源与采集记录.md
03-立项提案与范围说明.md
...
08-系统架构与技术选型.md  → 参考现有架构设计
09-API接口规格.md        → 参考AnniversaryCouponService
10-数据模型与存储规格.md  → 参考现有表结构
...
14-需求追踪矩阵.md

第二步:识别可复用资产

需求可复用资产复用方式
优惠券领取AnniversaryCouponService直接复用
满减计算SpringFestivalPromotionService修改阈值
积分翻倍SpringFestivalPromotionService直接复用

第三步:设计新增功能

限时抢购功能需要全新设计:

// POST /api/promotion/flash-sale
{
  "productId": 1001,
  "userId": 12345,
  "quantity": 1
}

关注点

关注点说明
需求明确结合Reference明确需求边界
设计先行先设计后开发,避免返工
可追溯性每个需求都能追溯到文档
团队协作文档作为团队沟通桥梁

优缺点

优点:

  • 需求清晰,减少歧义
  • 设计严谨,架构清晰
  • 可维护性强,便于后续迭代
  • 适合大型团队协作

缺点:

  • 前期投入大,文档编写耗时
  • 灵活性不足,需求变更成本高
  • 不适合快速迭代场景

3.2 基于Spec的TDD:测试先行,质量驱动

如果只是TDD,那么还是之前的TDD,如果基于Spec的TDD,会让TDD更严谨。

核心思想:先写测试用例,再实现代码,确保代码可测试性和正确性。

切入点

从测试场景出发,参考Reference代码定义”成功的标准”。

实战过程

第一步:参考Reference编写测试用例

@Test
voidtestReceiveCoupon_Success() {
    // 参考AnniversaryCouponService的发放逻辑
    UserCouponVOresult= couponService.receiveCoupon(userId, couponId);
    assertEquals("AVAILABLE", result.getStatus());
}

@Test
voidtestFullReduction_618Rule() {
    // 618规则:满300减50(参考春节满500减100)
    BigDecimaltotal= BigDecimal.valueOf(700);
    BigDecimaldiscount= promotionService.applyFullReduction(total);
    assertEquals(BigDecimal.valueOf(100), discount); // 300*2=600,减100
}

@Test
voidtestFlashSale_Success() {
    // 新增限时抢购测试
    FlashSaleResultresult= flashSaleService.purchase(userId, productId, 1);
    assertEquals("SUCCESS", result.getStatus());
}

第二步:运行测试(预期失败)

mvn test -pl order-service -Dtest=CouponServiceTest

第三步:实现代码(复用+新增)

@Service
publicclassPromotion618Service {
    
    @Autowired
    private AnniversaryCouponService couponService; // 复用
    
    @Autowired
    private SpringFestivalPromotionService springService; // 复用
    
    @Transactional(rollbackFor = Exception.class)
    public PromotionResult processOrder(Long orderId) {
        Orderorder= orderMapper.selectById(orderId);
        
        // 复用春节满减逻辑,修改618阈值
        BigDecimaldiscount= applyFullReduction(order.getTotalAmount());
        order.setDiscountAmount(discount);
        
        // 复用周年庆优惠券逻辑
        if (order.getCouponId() != null) {
            couponService.validateAndUseCoupon(order.getUserId(), order.getCouponId());
        }
        
        // 新增:积分翻倍(复用春节逻辑)
        springService.applyPointsMultiplier(order.getUserId(), order.getTotalAmount());
        
        return convertToResult(order);
    }
    
    private BigDecimal applyFullReduction(BigDecimal totalAmount) {
        // 618规则:满300减50
        BigDecimalthreshold= BigDecimal.valueOf(300);
        BigDecimalamount= BigDecimal.valueOf(50);
        inttimes= totalAmount.divide(threshold, RoundingMode.DOWN).intValue();
        return amount.multiply(BigDecimal.valueOf(times));
    }
}

关注点

关注点说明
测试覆盖确保核心逻辑有测试覆盖
可测试性代码设计考虑可测试性
质量保障测试驱动开发,代码质量高
重构安全测试保障重构不破坏功能

优缺点

优点:

  • 代码质量高,测试覆盖充分
  • 可测试性好,便于维护
  • 重构安全,测试作为安全网
  • 适合核心业务逻辑

缺点:

  • 开发周期较长
  • 初期投入大
  • 对测试人员要求高

3.3 Glue Coding:复用先行,效率驱动

“天下文章一大抄”,就是说的Glue Coding。项目中已经有稳定的代码框架和模板了,就没必要让AI再重新生成一遍代码,重新生成一定带来更多隐患和检查代价。

核心思想:优先复用现有代码和组件,快速拼接实现新功能。

切入点

从Reference代码出发,寻找可复用的组件。

实战过程

第一步:识别可复用组件

// 参考Reference目录结构
@Component
publicclassPromotionComponentScanner {
    
    public Map scanReusableComponents() {
        Map components = newHashMap<>();
        
        // 扫描春节促销代码
        components.put("fullReduction", newSpringFestivalPromotionService());
        components.put("pointsMultiplier", newSpringFestivalPromotionService());
        
        // 扫描周年庆代码
        components.put("couponDistributor", newAnniversaryCouponService());
        components.put("levelCalculator", newAnniversaryCouponService());
        
        // 扫描配置
        components.put("config", newPromotionConfig());
        
        return components;
    }
}

第二步:组合复用组件

@Service
publicclassPromotion618Service {
    
    @Autowired
    private AnniversaryCouponService couponService; // 直接注入
    
    @Autowired
    private PromotionConfig promotionConfig;
    
    @Value("${promotion.618.full-reduction.threshold:300}")
    private BigDecimal threshold;
    
    @Value("${promotion.618.full-reduction.amount:50}")
    private BigDecimal amount;
    
    @Transactional(rollbackFor = Exception.class)
    public PromotionResult processOrder(Long orderId) {
        Orderorder= orderMapper.selectById(orderId);
        
        // 复用春节满减逻辑(修改参数)
        BigDecimaldiscount= calculateDiscount(order.getTotalAmount());
        order.setDiscountAmount(discount);
        
        // 复用周年庆优惠券验证
        if (order.getCouponId() != null) {
            couponService.validateAndUseCoupon(order.getUserId(), order.getCouponId());
        }
        
        return convertToResult(order);
    }
    
    private BigDecimal calculateDiscount(BigDecimal totalAmount) {
        // 复用SpringFestivalPromotionService的计算逻辑
        inttimes= totalAmount.divide(threshold, RoundingMode.DOWN).intValue();
        return amount.multiply(BigDecimal.valueOf(times));
    }
}

第三步:配置618活动参数

# application.yml
promotion:
  618:
    enabled: true
    start-time: 2026-06-01T00:00:00
    end-time: 2026-06-18T23:59:59
    full-reduction:
      threshold: 300
      amount: 50

关注点

关注点说明
代码复用最大化复用Reference代码
快速开发缩短开发周期
一致性保持代码风格与现有一致
配置化可变参数外部配置

优缺点

优点:

  • 开发速度快(复用已有代码)
  • 代码质量有保障(经过验证的代码)
  • 代码一致性好
  • 适合快速迭代

缺点:

  • 可能受限于现有代码结构
  • 需要良好的代码资产积累
  • 可能引入不必要的依赖

3.4 Harness:自动化先行,交付驱动

整体是个框架,限制边界。

核心思想:建立自动化的CI/CD流水线,实现从代码提交到生产部署的全流程自动化。

切入点

从部署流程出发,结合现有基础设施构建自动化能力。

实战过程

第一步:配置CI流水线(复用已有配置)

stage:
  name:构建阶段
type:CI
spec:
    codebase:
      repo:https://github.com/example/order-service
      branch:feature/618-promotion
    build:
      type:Maven
      spec:
        pomPath:pom.xml
        goals:cleanpackage-DskipTests
    artifacts:
      -name:order-service.jar
        path: target/order-service-1.0.0.jar

第二步:配置CD流水线(参考现有部署规范)

stage:
  name:部署阶段
type:CD
spec:
    environment:测试环境
    deploymentType:Kubernetes
    strategy:
      type:RollingUpdate
      spec:
        maxSurge:25%
        maxUnavailable:25%
    manifest:
      type:Helm
      spec:
        chartPath:charts/order-service
        values:
          replicaCount:5
          env:
            -name:PROMOTION_ENABLED
              value:"true"
            -name:PROMOTION_THRESHOLD
              value: "300"

第三步:配置持续验证

stage:
  name:验证阶段
type:Verify
spec:
    duration:30m
    metrics:
      -name:响应时间
        query:avg(http_request_duration_seconds)
        threshold:500ms
      -name:错误率
        query:sum(http_requests_total{status=~"5..*"})/sum(http_requests_total)
        threshold:5%
    onFailure:
      action: rollback

关注点

关注点说明
自动化部署代码提交自动触发部署
持续验证部署后持续监控
智能回滚自动检测问题并回滚
可观测性实时监控和告警

优缺点

优点:

  • 部署效率高
  • 可靠性强,自动回滚
  • 可观测性好
  • 适合持续交付

缺点:

  • 前期配置复杂
  • 需要一定的DevOps能力
  • 基础设施要求高

3.5 Vibe Coding:体验先行,氛围驱动

没想到吧,Vibe Coding在企业场景也有用处的,有很大的作用。

核心思想:通过快速原型验证用户体验和交互设计,强调情感化设计和用户感受。

切入点

从用户体验出发,快速验证交互效果和视觉风格。

实战过程

第一步:快速原型设计



    
    
        
            0
            6
            :
            1
            8
        

内容效果不满意?点此反馈

输入关键词开始搜索