首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >用CodeBuddy重构老旧的JavaScript工具类

用CodeBuddy重构老旧的JavaScript工具类

原创
作者头像
china马斯克
修改2025-09-26 11:46:06
修改2025-09-26 11:46:06
1680
举报

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

不知道大家有没有这种感觉。就是在长期迭代的前端项目中,工具类文件(如utils.js)往往会成为技术债务的重灾区。我曾接手过一个存在 5 年之久的项目,其工具类文件已膨胀至 2000+ 行,包含 100+ 个函数,其中存在大量重复逻辑、命名矛盾(如camelCase与snake_case混用)、甚至隐藏的副作用函数。这篇文章我就来分享一下,我是如何借助 CodeBuddy在 来完成老旧的JavaScript工具类的重构的。

一、协作背景与目标

问题工具类现状

文件:utils.js(200+ 行代码)

问题:

  • 函数命名风格混杂(如 get_date 与 formatString 共存)
  • 3 处重复的字符串去空格逻辑
  • 无任何注释或文档
  • 全局暴露方式(window.Utils)

重构目标:

  1. 转换为 ES6 模块化导出
  2. 统一驼峰式命名规范
  3. 消除重复代码
  4. 添加完整 JSDoc 注释
  5. 新增时区支持(关键功能增强)
  6. 确保所有原有功能 100% 兼容

二、工具与场景配置

AI 工具:CodeBuddy

项目环境

  • 语言:ECMAScript
  • 模块系统:ES Modules
  • 依赖:无框架依赖(纯 JavaScript)
  • 测试方式:Node.js 环境 + 浏览器控制台验证

三、协作关键步骤

1. 初始重构需求输入

将原始代码片段(示例)粘贴给 CodeBuddy:

代码语言:txt
复制
// 原始 utils.js 片段(问题代码)
function get_date() { /*...*/ }
function formatString(str) { /*...*/ }
function trim_left(s) { return s.replace(/^\s*/, ''); }
function trim_right(s) { return s.replace(/\s*$/, ''); }
function trim_all(s) { return s.replace(/\s+/g, ''); } // 错误实现!

输入完整重构需求:

重构该工具类,要求:

1. 使用 ES6 模块化导出(export)

2. 所有函数命名改为驼峰式

3. 移除重复逻辑(如多个 trim 函数)

4. 每个函数添加 JSDoc 注释

5. 保留原有功能不变

6. 按功能分类组织代码

2. CodeBuddy 生成的重构代码

代码语言:txt
复制
/**
 * 工具类集合 - 日期与字符串处理
 * @module utils
 */

/**
 * 日期处理工具集
 */
export const DateUtils = {
  /**
   * 格式化日期
   * @param {Date} date - 要格式化的日期对象
   * @param {string} [format='YYYY-MM-DD'] - 格式模板
   * @param {string} [timezone='local'] - 时区(如 'Asia/Shanghai')
   * @returns {string} 格式化后的日期字符串
   */
  formatDate(date, format = 'YYYY-MM-DD', timezone = 'local') {
    // 时区处理逻辑(初始版本未实现)
    // ...后续补充
  },

  // 其他日期函数...
};

/**
 * 字符串处理工具集
 */
export const StringUtils = {
  /**
   * 去除字符串两端空白字符
   * @param {string} str - 输入字符串
   * @returns {string} 处理后的字符串
   */
  trim(str) {
    return str.trim();
  },

  /**
   * 字符串转数组(修复空字符串问题)
   * @param {string} str - 输入字符串
   * @param {string} [separator=','] - 分隔符
   * @returns {Array} 分割后的数组
   */
  strToArray(str, separator = ',') {
    if (!str || str.trim() === '') return [];
    return str.split(separator).map(item => item.trim());
  },

  // 其他字符串函数...
};

3. 时区功能增强需求

发现问题:初始生成的 formatDate 函数缺少时区支持 提出问题:

formatDate 函数需支持传入时区(如 'Asia/Shanghai'),默认使用本地时区。

使用 Intl.DateTimeFormat 实现国际化时区处理。

提出问题
提出问题

AI 增强后的代码

代码语言:txt
复制
formatDate(date, format = 'YYYY-MM-DD', timezone = 'local') {
  const options = {
    year: 'numeric',
    month: '2-digit',
    day: '2-digit',
    hour: '2-digit',
    minute: '2-digit',
    second: '2-digit',
    timeZone: timezone === 'local' ? Intl.DateTimeFormat().resolvedOptions().timeZone : timezone
  };

  // 格式模板映射
  const formatter = new Intl.DateTimeFormat('en-US', options);
  const parts = formatter.formatToParts(date);
  
  // 简单模板替换(实际项目建议使用 date-fns 等库)
  const values = {};
  parts.forEach(part => values[part.type.toLowerCase()] = part.value);
  
  return format
    .replace('YYYY', values.year)
    .replace('MM', values.month)
    .replace('DD', values.day)
    // ...其他替换逻辑
}

4. 边界条件修复

测试发现问题:strToArray('') 返回 [undefined] 反馈 问题:

StringUtils.strToArray 在输入空字符串时应返回空数组,当前返回 [undefined],请修复

继续提问
继续提问

修复后代码

代码语言:txt
复制
strToArray(str, separator = ',') {
  if (typeof str !== 'string' || str.trim() === '') return [];
  return str.split(separator)
    .map(item => item.trim())
    .filter(item => item !== ''); // 额外过滤空项
}

四、最终效果

五、总结

对我们开发人员来说,重构不是简单的代码美化,而是对知识资产的重新整合。就像整理书房,表面是清理杂物,本质是建立高效的知识检索系统。当然在进行的过程中,我们需要学会接受不完美,认识到重构是持续过程,不是一次性任务。毕竟技术和知识都在进步。好了,今天的分享就到这里了。我们下篇见咯!

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、协作背景与目标
  • 二、工具与场景配置
  • 三、协作关键步骤
    • 1. 初始重构需求输入
    • 2. CodeBuddy 生成的重构代码
    • 3. 时区功能增强需求
    • 4. 边界条件修复
  • 四、最终效果
  • 五、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档