十年Java老兵转投AI编程怀抱:我用Cursor和Copilot重构了整个微服务项目
·
我用AI编程工具重构了整个微服务项目
背景
作为有十年经验的Java后端开发者,我一直对AI编程持观望态度。直到上个月接手了一个遗留的Spring Cloud微服务项目,代码质量堪忧、文档缺失、测试覆盖率不足10%。在时间紧迫的情况下,我决定尝试用AI编程工具来协助重构。
项目概况
- 模块数量:12个微服务
- 代码量:约50万行
- 技术栈:Spring Cloud + MyBatis + MySQL + Redis
- 核心问题:重复代码多、事务管理混乱、缺乏单元测试
重构流程
第一步:代码分析与理解
我使用Cursor打开整个项目,利用其项目级代码理解能力进行分析:
// 原有代码 - 每个Service都有相似的CRUD模板
public class UserService {
public ApiResponse<User> createUser(UserCreateReq req) {
// 参数校验
if (StringUtils.isEmpty(req.getUsername())) {
return ApiResponse.error("用户名不能为空");
}
// ... 其他校验
// 转换
User user = new User();
BeanUtils.copyProperties(req, user);
user.setCreatedAt(LocalDateTime.now());
// 保存
userMapper.insert(user);
return ApiResponse.success(user);
}
}
Cursor帮我分析出了所有Service中的共性代码模式,并建议提取通用BaseService。
第二步:AI辅助重构
// AI生成的通用BaseService
public abstract class BaseService<D, T, Q> {
@Autowired
protected BaseMapper<T> mapper;
public ApiResponse<T> create(D createReq) {
// 通用参数校验 (通过注解)
validate(createReq);
// DTO -> Entity转换
T entity = convertToEntity(createReq);
// 填充通用字段
fillBaseFields(entity);
// 保存
mapper.insert(entity);
return ApiResponse.success(entity);
}
protected abstract T convertToEntity(D dto);
protected abstract void validate(D dto);
protected void fillBaseFields(T entity) {
if (entity instanceof BaseEntity) {
BaseEntity be = (BaseEntity) entity;
be.setCreatedAt(LocalDateTime.now());
be.setUpdatedAt(LocalDateTime.now());
}
}
}
第三步:单元测试生成
Copilot在生成测试方面表现最为突出:
@ExtendWith(MockitoExtension.class)
class UserServiceTest {
@Mock
private UserMapper userMapper;
@InjectMocks
private UserService userService;
@Test
void createUser_ValidRequest_ShouldReturnSuccess() {
// Arrange
UserCreateReq req = new UserCreateReq();
req.setUsername("testUser");
req.setEmail("test@example.com");
User user = new User();
user.setId(1L);
user.setUsername("testUser");
when(userMapper.insert(any(User.class))).thenReturn(1);
// Act
ApiResponse<User> response = userService.createUser(req);
// Assert
assertThat(response.isSuccess()).isTrue();
verify(userMapper).insert(any(User.class));
}
}
成果
| 指标 | 重构前 | 重构后 |
|---|---|---|
| 代码行数 | 50万 | 32万 |
| 重复代码率 | 35% | 8% |
| 测试覆盖率 | 8% | 78% |
| 构建时间 | 12min | 7min |
感悟
AI编程不是要取代程序员,而是要让我们从重复劳动中解放出来,专注于更有创造性的工作。关键在于如何正确提问和如何审阅AI的输出。
更多推荐



所有评论(0)