首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >CodeBuddy辅助Java代码重构:航道管理系统复杂业务逻辑模块化拆分

CodeBuddy辅助Java代码重构:航道管理系统复杂业务逻辑模块化拆分

原创
作者头像
china马斯克
发布2025-09-20 09:03:45
发布2025-09-20 09:03:45
1440
举报

友友们,早上好啊。今天继续AI工具实战系列。我将分享最近几个月使用ai工具用于工作的那些事。既是一次知识的分享,又是一次自我的一次总结,也希望自己的一些使用经验可以帮助到大家。下面正文开始。

一、提出问题与重构目标:

最近在某智慧航道管理系统的后端开发中,我们团队遇到的典型问题是某些文件代码量太大,比如VesselRouteService.java文件已膨胀至1800行,集成了航道规划、船舶调度、潮汐计算、锚地分配等15个核心业务流程。这种高度耦合的设计导致以下问题的出现,比如:

  1. 潮汐预测算法修改影响船舶调度逻辑
  2. 新航道开通需要理解整个系统的数据流
  3. 关键业务的事务管理混乱

于是我打算借助CodeBuddy来进行代码梳理和重构目标,首先设立一个目标:

计算在3小时内将该类拆分为5个独立模块,确保以下功能项:

  1. 功能完整性(100%回归测试通过)
  2. 模块职责单一(每个类不超过400行)
  3. 保持原有Spring依赖注入和事务体系

二、工具选择与场景适配

采用CodeBuddy 进行AI辅助重构,基于以下考量:

  • 地理空间数据处理:完美处理WKT格式坐标、GIS计算等航道特有逻辑
  • 多数据源支持:兼容MySQL(业务数据)和Redis(实时潮汐数据)
  • 复杂事务管理:准确识别@Transactional(propagation = Propagation.REQUIRES_NEW)等高级配置

基础配置:

这里我们导入了部分需要的依赖

代码语言:txt
复制
// build.gradle片段
plugins {
    id 'java'
    id 'org.springframework.boot' version '3.2.0'
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.locationtech.jts:jts-core:1.19.0' // GIS处理
    // 其他依赖...
}

三、关键重构步骤详解

主要的核心代码很多,这里只展示部分,免得大家看着费劲。

1. 初始代码诊断

重构前VesselRouteService核心结构:

代码语言:txt
复制
@Service
public class VesselRouteService {
    @Autowired private TideRepository tideRepository;
    @Autowired private VesselRepository vesselRepository;
    
    // 航道规划方法(含潮汐校验)
    public RoutePlan planRoute(Vessel vessel, Point destination) {
        // 200行复杂逻辑...
        TideData tide = tideRepository.findLatest(vessel.getCurrentPort());
        if (!isSafeDepth(vessel.getDraft(), tide.getHeight())) {
            throw new RoutingException("水深不足");
        }
        // ...
    }
    
    // 船舶调度
    public void scheduleVessel(Long vesselId) { /*...*/ }
    
    // 其他12个方法...
}

2. 模块化拆分指令

向CodeBuddy输入核心指令:

首先需要拆分VesselRouteService.java,按功能拆分为:

1. RoutePlanningService(航道规划核心算法)

2. TideValidationService(潮汐校验服务)

3. VesselSchedulingService(船舶调度引擎)

4. AnchorageAllocationService(锚地分配)

5. NavigationSafetyService(航行安全检查)

同时我提出了以下要求:

  1. 保留原有@Autowired依赖
  2. 通过接口暴露必要方法
  3. 保持分布式事务边界
  4. 拆分后通过@Autowired调用各模块

3. 首次拆分结果验证

AI生成的核心模块结构:

TideValidationService.java

代码语言:txt
复制
@Service
public class TideValidationService {
    @Autowired private TideRepository tideRepository;
    
    @Transactional(readOnly = true)
    public boolean validateTideCondition(Point location, double vesselDraft) {
        TideData tide = tideRepository.findLatestByCoordinates(location);
        return vesselDraft <= (tide.getHeight() + tide.getSurge());
    }
}

RoutePlanningService.java

代码语言:txt
复制
@Service
public class RoutePlanningService {
    @Autowired private NavigationSafetyService safetyService; // 意外注入
    
    public RoutePlan calculateRoute(Vessel vessel, Point destination) {
        // 仅包含基础路径计算,缺少潮汐校验
        List<Point> waypoints = calculateShortestPath(vessel, destination);
        return new RoutePlan(waypoints);
    }
}

4. 业务逻辑修复

看代码后,我发现"航道规划必须包含潮汐校验"逻辑丢失后,于是补充指令:

RoutePlanningService生成航道规划时,必须调用TideValidationService进行水深验证,原逻辑应在同一个事务中完成,确保数据强一致性。

修复后的RoutePlanningService:

代码语言:txt
复制
@Service
public class RoutePlanningService {
    @Autowired private TideValidationService tideService;
    @Autowired private NavigationSafetyService safetyService;
    
    @Transactional
    public RoutePlan calculateRoute(Vessel vessel, Point destination) {
        // 1. 基础路径计算
        List<Point> waypoints = calculateShortestPath(vessel, destination);
        
        // 2. 潮汐验证(新增逻辑)
        waypoints.forEach(point -> {
            if (!tideService.validateTideCondition(point, vessel.getDraft())) {
                throw new RoutingException("路径存在水深不足区域");
            }
        });
        
        // 3. 安全检查
        safetyService.checkNavigationHazards(waypoints);
        
        return new RoutePlan(waypoints);
    }
}

测试阶段出现循环依赖错误:

代码语言:txt
复制

The dependencies of some of the beans in the application form a cycle:

┌─────┐
|  routePlanningService defined in file [.../RoutePlanningService.class]
|  └───┐
|     @Autowired tideValidationService
|     └───┐
|           vesselSchedulingService defined in file [.../VesselSchedulingService.class]
└─────┘

向CodeBuddy咨询解决方案后,采用接口隔离+@Lazy注解:

修改后的依赖结构

代码语言:txt
复制
// 新增校验接口
public interface TideValidator {
    boolean validate(Point location, double draft);
}

@Service
public class TideValidationService implements TideValidator {
    // 实现细节...
}

@Service
public class RoutePlanningService {
    @Lazy @Autowired private TideValidator tideValidator; // 接口注入
    // ...其他代码
}

四、重构效果验证

重构类说明
重构类说明

性能对比

模块测试结果
模块测试结果

可以看出重构的决定是正确的,模块的单独性能都有了比较大的提升,并且代码类也清爽了很多。大家如果有类似的问题,也可以参考我的解决方式。好了,本期的分享就到这里,我们下期见!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、提出问题与重构目标:
  • 二、工具选择与场景适配
  • 三、关键重构步骤详解
    • 1. 初始代码诊断
    • 2. 模块化拆分指令
    • 3. 首次拆分结果验证
    • 4. 业务逻辑修复
  • 四、重构效果验证
    • 性能对比
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档