大数跨境
0
0

AI架构师的诞生:AI+传统DDD模式 = 实现开发效率提升75%

AI架构师的诞生:AI+传统DDD模式 = 实现开发效率提升75% 阿里云开发者
2025-12-18
3

本文以淘宝闪购服务包系统为案例,探索如何借助 AI 技术辅助领域驱动设计(DDD)落地。

一、背景

1.1 改造背景

随着服务包业务快速发展,新增一个服务包类型需耗费5-8人天,原有单体架构暴露出严重开发效率瓶颈:

  • 开发成本高:每次新增需在8个核心文件、15-20个方法中修改200-300行代码;
  • 重复代码多:商品类型判断逻辑在10个文件中重复出现;
  • 架构耦合严重:3800行的业务服务类混合了商品、价格、合同等多领域逻辑;
  • 扩展风险高:新增功能易引发回归问题,影响现有业务稳定性。

1.2 改造目标

采用DDD思想结合AI辅助进行架构重构,实现智能化演进:

  • AI驱动架构设计:利用AI分析代码结构与业务逻辑,自动识别领域边界与上下文划分;
  • 智能化模型落地:通过AI生成领域模型、接口及数据转换等重复性代码,提升开发效率;
  • 持续优化机制:建立AI驱动的代码质量监控体系,实时评估架构健康度与复杂度;
  • 降低成本:将新增服务包开发成本从5-8人天降至配置化实现;
  • 智能演进:构建可持续升级的智能架构体系,支撑业务快速迭代。

二、架构设计阶段

2.1 AI拆解限界上下文

问题:基于现有代码package结构,由AI初步抽象限界上下文。

结果:AI根据包路径自动生成上下文划分方案。

2.2 人工介入修正限界上下文

AI仅基于物理结构拆分,未深入理解业务语义。经人工分析后优化上下文边界,形成符合业务逻辑的真实限界上下文。

2.3 通过AI细化限界上下文

基于人工修正后的上下文,进一步使用AI细化设计。以商品上下文为例:

指令:从原domain包中提取商品相关类、Repo和服务,命名规范为Domain结尾,并输出表格。

经过多轮迭代优化,最终形成清晰的商品上下文设计模型。

三、代码实现阶段

3.1 基于文档生成代码骨架

依据《技术方案--服务包模型升级.md》文档,调用AI生成v61.domain包下的代码骨架。

3.2 AI辅助代码实现

案例1:API转换实现

任务:将List shopConfirmableContracts转换为ConfirmableServiceProgramDTO,参考原链路逻辑。

效果:新增734行代码,人工修正25行,准确率达96.6%。

案例2:版本比对工具实现

任务:编写queryConfirmableProgramList方法返回结果一致性校验工具ProgramVersionComparisonUtil。

效果:生成3098行代码,人工修正12行,准确率高达99.6%。

四、重构效果分析

4.1 架构解耦度分析

以queryConfirmableProgramList方法为例,对比重构前后实现差异。

重构前后实现对比

重构前实现

  • 代码行数:主方法42行 + 核心链路约1,500行;
  • 复杂度:高度耦合,多种业务逻辑混杂;
  • 重复代码:大量商品类型判断逻辑重复。

重构后实现

  • 代码行数:主方法37行 + 核心链路约720行;
  • 复杂度:通过领域服务解耦,逻辑清晰;
  • 职责分离:各上下文专注自身业务逻辑。

核心实现逻辑对比

@Override
public SingleResponse<ConfirmableServiceProgramDTO> 
    queryConfirmableProgramList(ConfirmableProgramQuery query){
    try {
        // step.1 参数校验和门店信息获取
        if (query == null || query.getShopId() == null) {
            return SingleResponse.buildFailure("参数不能为空");
        }
        
        ShopInfoDTO shopInfo = shopQueryAbility.queryShopInfo(query.getShopId());
        if (shopInfo == null) {
            return SingleResponse.buildFailure("门店不存在");
        }

        // step.2 获取可签方案列表 - 复杂的扩展点机制
        List<ServiceProgramDTO> programs = new ArrayList<>();
        
        // 获取所有商品信息
        List<GoodsDTO> allGoods = goodsQueryAbility.queryAllGoods();

        for (GoodsDTO goods : allGoods) {
            // 重复的商品类型判断逻辑 - 问题点1
            if (switch51ConfigGateway.superClientGoodId().equals(goods.getGoodsId())) {
                // 超客商品特殊处理
                if (validateSuperClientGoods(goods, shopInfo)) {
                    ServiceProgramDTO program = buildSuperClientProgram(goods, shopInfo);
                    programs.add(program);
                }
            } else if (switch51ConfigGateway.platformDeliveryGoodId().equals(goods.getGoodsId())) {
                // 平台配送商品特殊处理
                if (validatePlatformDeliveryGoods(goods, shopInfo)) {
                    ServiceProgramDTO program = buildPlatformDeliveryProgram(goods, shopInfo);
                    programs.add(program);
                }
            } else if (switch51ConfigGateway.selfDeliveryGoodId().equals(goods.getGoodsId())) {
                // 自配送商品特殊处理
                if (validateSelfDeliveryGoods(goods, shopInfo)) {
                    ServiceProgramDTO program = buildSelfDeliveryProgram(goods, shopInfo);
                    programs.add(program);
                }
            }
            // ... 更多商品类型判断
        }

        // step.3 价格计算 - 内嵌在业务服务中
        for (ServiceProgramDTO program : programs) {
            // 硬编码的价格计算逻辑 - 问题点2
            if (program.getDeliveryType().equals("PLATFORM")) {
                program.setCommissionRate(new BigDecimal("0.08")); // 8%
                program.setDeliveryFee(calculatePlatformDeliveryFee(program, shopInfo));
            } else if (program.getDeliveryType().equals("SELF")) {
                program.setCommissionRate(new BigDecimal("0.10")); // 10%
                program.setDeliveryFee(calculateSelfDeliveryFee(program, shopInfo));
            }

            // 保底价计算
            BigDecimal basePrice = priceCalculateAbility.calculateBasePrice(
                program.getGoodsId(), shopInfo.getCategoryId());
            program.setBasePrice(basePrice);
        }

        // step.4 活动处理 - 分散的活动逻辑
        List<ActivityDTO> activities = activityQueryAbility.queryShopActivities(query.getShopId());
        for (ServiceProgramDTO program : programs) {
            for (ActivityDTO activity : activities) {
                // 活动匹配逻辑分散 - 问题点3
                if (activity.getType().equals("COMMISSION_DISCOUNT")) {
                    if (activity.getTargetGoods().contains(program.getGoodsId())) {
                        BigDecimal discountRate = activity.getDiscountRate();
                        BigDecimal newRate = program.getCommissionRate().subtract(discountRate);
                        program.setCommissionRate(newRate);
                        program.setActivityId(activity.getActivityId());
                    }
                } else if (activity.getType().equals("DELIVERY_DISCOUNT")) {
                    // 配送费优惠逻辑
                    if (activity.getTargetGoods().contains(program.getGoodsId())) {
                        BigDecimal discountFee = activity.getDiscountAmount();
                        BigDecimal newFee = program.getDeliveryFee().subtract(discountFee);
                        program.setDeliveryFee(newFee);
                    }
                }
            }
        }

        // step.5 构建返回结果
        ConfirmableServiceProgramDTO result = new ConfirmableServiceProgramDTO();
        result.setShopId(query.getShopId());
        result.setPrograms(programs);
        result.setTotalCount(programs.size());

        return SingleResponse.of(result);

    } catch (Exception e) {
        logger.error("查询可签方案失败,shopId:{},异常:{}", 
            query.getShopId(), e.getMessage(), e);
        return SingleResponse.buildFailure("查询失败");
    }
}

// 重复的商品校验方法 - 在多个地方重复出现
private boolean validateSuperClientGoods(GoodsDTO goods, ShopInfoDTO shopInfo){
    // 重复的商品类型判断逻辑
    if (!switch51ConfigGateway.superClientGoodId().equals(goods.getGoodsId())) {
        return false;
    }

    // 区域校验逻辑内嵌
    List<String> allowedCities = goods.getAllowedCities();
    if (!allowedCities.contains(shopInfo.getCity())) {
        return false;
    }

    // 品类校验逻辑内嵌
    List<Long> allowedCategories = goods.getAllowedCategories();
    if (!allowedCategories.contains(shopInfo.getCategoryId())) {
        return false;
    }

    return true;
}
// 类似的重复方法还有:
// validatePlatformDeliveryGoods()
// validateSelfDeliveryGoods()
// buildSuperClientProgram()
// buildPlatformDeliveryProgram()
// buildSelfDeliveryProgram()
@Override
public SingleResponse<ConfirmableServiceProgramDTO> 
    queryConfirmableProgramList(ConfirmableProgramQuery query){

    // step.1 获取门店信息 - 门店上下文
    ShopDomain shopDomain = shopDomainService
        .getShop(query.getShopId());

    // step.2 查询可签合同列表 - 合同上下文
    List<ShopContractDomain> contracts = 
        shopContractDomainService
        .getShopConfirmableContractList(shopDomain);

    // step.3 商品校验 - 商品上下文
    contracts = goodsDomainService
        .filterAvailableContracts(contracts, shopDomain);

    // step.4 价格计算 - 价格上下文
    contracts = priceDomainService
        .enrichContractPrice(contracts);

    // step.5 活动匹配 - 活动上下文
    contracts = activityDomainService
        .applyActivityDiscount(contracts, shopDomain);

    // step.6 转换为DTO返回
    ConfirmableServiceProgramDTO result = 
        buildConfirmableServiceProgramDTO(contracts);

    return SingleResponse.of(result);
}

问题点

  • 业务逻辑高度耦合在一个方法中;
  • 商品类型判断逻辑重复出现;
  • 扩展点机制复杂,难以维护;
  • 缺乏清晰的职责分离。

优势

  • 步骤清晰,每步职责单一;
  • 通过领域服务实现解耦;
  • 消除重复代码,提高可维护性;
  • 符合开闭原则,易于扩展。
维度 重构前特点 重构后特点 改进效果
代码结构 主方法42行 + 核心链路~1,500行 主方法37行 + 核心链路~720行 调用链路减少52%,复杂度显著降低
职责分离 所有逻辑混合在业务服务中 按上下文分离,各司其职 职责单一,易于维护
商品处理 重复的商品类型判断逻辑 统一的商品校验服务 重复代码消除100%
价格计算 内嵌在查询逻辑中 独立的价格计算服务 价格逻辑内聚
活动处理 分散的活动匹配逻辑 统一的活动服务 活动逻辑集中管理
扩展性 修改需改动多处代码 新增功能只需扩展对应上下文 支持开闭原则
测试性 难以进行单元测试 每个上下文可独立测试 测试覆盖率提升

重构前核心问题点

1. 重复代码泛滥

  • switch51ConfigGateway.superClientGoodId().equals() 判断逻辑在10个文件中重复;
  • buildDeliveryProgramTypeEnum 方法在2个类中完全重复;
  • 商品类型判断逻辑分散在多个Ability类中。

2. 业务逻辑耦合

  • 价格计算直接依赖商品属性;
  • 合同创建逻辑与数据持久化混合;
  • 活动优惠逻辑散落在多个环节。

3. 扩展性差

  • 新增商品类型需在多处添加switch判断;
  • 新增活动类型需修改多个Ability类;
  • 新增合同模板需修改8个文件、15-20个方法。

4.2 重复代码模式识别

通过AI分析发现以下重复模式:

商品类型判断逻辑重复

在10个文件中发现相同判断逻辑:

// 在多个文件中重复出现的商品类型判断逻辑
if (switch51ConfigGateway.superClientGoodId().equals(goods.getGoodsId())) {
    // 超客商品特殊处理逻辑
    // 这段逻辑在10个不同文件中重复出现
}

涉及文件:

1. DefaultConfirmableProgramQueryExt.java - buildDeliveryProgramTypeEnum方法
2. ProgramConverter.java - buildDeliveryProgramTypeEnum方法
3. ProgramAbilityImpl.java - signEUnion方法
4. ProgramAbilityImpl.java - getSignGoodRequest方法
5. ProgramQueryAbilityImpl.java - 多个方法
6. ProgramSignAbilityImpl.java - 多个方法
7. DefaultProgramQueryExt.java - 查询逻辑
8. ProgramBizServiceImpl.java - 三个核心方法
9. ProgramTypeEnumBuilder.java - 类型构建逻辑
10. DeliveryProgramConverter.java - 转换逻辑

buildDeliveryProgramTypeEnum方法重复

该方法在以下两个类中完全重复:

  • DefaultConfirmableProgramQueryExt
  • ProgramConverter
重复代码消除效果

4.3 新增服务商品改动点对比

对比v6(重构前)与v61(重构后)新增服务商品所需修改范围:

重构前需修改文件 重构后需修改文件

核心业务服务层修改

1. ProgramBizServiceImpl.java
  • queryConfirmableProgramList方法;
  • queryConfirmableCombineProgramList方法;
  • signProgram方法;
  • 需在3个核心方法中添加新商品类型判断逻辑;

扩展点和转换层修改

2. DefaultConfirmableProgramQueryExt.java
  • buildDeliveryProgramTypeEnum方法
  • queryConfirmableProgramList扩展逻辑
3. ProgramConverter.java
  • buildDeliveryProgramTypeEnum方法(重复)
  • 领域对象转换逻辑

能力层修改

4. ProgramAbilityImpl.java
  • signEUnion方法
  • getSignGoodRequest方法
5. ProgramQueryAbilityImpl.java
  • 多个查询方法
  • 商品类型过滤逻辑
6. ProgramSignAbilityImpl.java
  • 多个签约方法
  • 签约流程判断逻辑

工具类和构建器修改

7. DeliveryProgramConverter.java
  • 配送方案转换逻辑
  • 商品类型映射
8. ProgramTypeEnumBuilder.java
  • 枚举构建逻辑
  • 新类型定义

领域模型层修改

1. ContractTemplateDomain.java
  • 添加新合同模板配置
  • 商品组合定义
  • 模板属性扩展

商品上下文修改(可选)

2. GoodsDomain.java
  • 仅当涉及新商品属性时才需修改
  • 配送类型定义
  • 商品特性扩展

数据配置修改

3. 数据库配置
  • 合同模板表添加新记录
  • 配置商品组合关系
  • 设置模板生效规则

可能的扩展修改

4. 枚举类扩展(如需要)
  • 新增合同类型枚举
  • 商品类型枚举扩展

改动点对比总结

五、AI架构升级总结

5.1 AI架构升级价值和效果

核心价值

  • 智能分析:快速识别重复模式、梳理依赖关系,提供现状洞察;
  • 高效生成:代码生成准确率超99%,效率提升8-10倍;
  • 质量保障:提供架构评估、最佳实践指导与风险预警。

实施要点

  • 人机协同:AI处理重复工作,人聚焦业务决策与质量把控;
  • 渐进推进:遵循“分析→设计→实现→验证”流程,分阶段控制质量;
  • 质量管控:AI生成代码必须人工审查,辅以自动化检查机制。

实际效果

  • 效率提升:新增3832行代码中AI生成占比超70%,重构周期缩短75%以上;
  • 质量改善:代码量减少52%,重复代码消除100%,改动点从8个文件降至1-2个;
  • 业务价值:开发成本从5-8人天降至配置化操作,支持快速迭代。

5.2 AI架构升级总结展望

AI辅助架构升级验证了人机协作的有效性,使工程师从繁琐编码中解放,专注于架构设计与业务创新。这一模式有望成为软件工程的新常态。

【声明】内容源于网络
0
0
阿里云开发者
阿里巴巴官方技术号,关于阿里的技术创新均呈现于此。
内容 3580
粉丝 0
阿里云开发者 阿里巴巴官方技术号,关于阿里的技术创新均呈现于此。
总阅读19.5k
粉丝0
内容3.6k