如何用重构解锁高效 Vue 开发之路

news2025/2/27 14:26:27

在这里插入图片描述

在这里插入图片描述

文章目录

    • 摘要
    • 引言
    • 什么是代码重构
    • 为什么要减少重复逻辑
    • Vue 示例代码
      • 问题场景
      • 初始代码的痛点
      • 重构后的通用组件 TaskList.vue
        • 详细说明
      • 重用通用组件
        • 详细说明
      • 模拟数据与运行结果
    • QA环节
    • 总结
    • 参考资料

摘要

代码重构是改善代码质量的重要手段,特别是在减少重复逻辑方面。通过遵循重构原则和方法,可以提高代码的可维护性、可读性和可扩展性。本篇文章将探讨如何通过代码重构减少重复逻辑,介绍具体的实现方式,并提供 Vue 示例代码。

引言

在软件开发中,开发者经常会因项目进度紧张或缺乏经验,直接复制粘贴已有代码以实现功能。尽管这种方式可以快速交付,但却会在项目中留下大量重复逻辑,增加了代码维护的复杂性。代码重构可以帮助我们清除这些重复逻辑,使代码更加简洁、规范。

什么是代码重构

代码重构是指在不改变代码外部行为的情况下,对代码内部结构进行调整,以提升其质量。这种调整通常包括简化代码逻辑、删除重复代码、改善代码可读性等。

为什么要减少重复逻辑

  1. 提升代码可维护性:重复逻辑会导致相同的问题需要多处修复。
  2. 减少错误概率:减少重复逻辑意味着减少手动更新代码的机会,从而降低引入新错误的可能性。
  3. 提高代码复用性:通过提取公共逻辑,可以构建更模块化的代码结构。

Vue 示例代码

问题场景

假设我们开发一个任务列表应用,其中有两个页面:待办任务已完成任务。这两个页面的渲染逻辑相似,导致代码重复。

初始代码的痛点

在初始代码中,我们有两个页面组件:TodoList.vueCompletedList.vue。两个组件的代码大致相同,区别仅在于显示的标题和绑定的任务数据:

  1. 代码重复:两个组件中存在高度重复的 HTML 和 JavaScript 逻辑。
  2. 难以维护:如果需要更新任务列表的展示逻辑,则需要在两个组件中分别修改,容易引入错误。
  3. 低复用性:无法快速适配其他类似页面(如“延迟任务”或“取消任务”)。

这使得代码冗长,维护成本高。

重构后的通用组件 TaskList.vue

我们通过代码重构,提取出了一个通用组件 TaskList.vue,其职责仅为根据输入的 props 渲染任务列表。

<!-- TaskList.vue -->
<template>
  <div>
    <h1>{{ title }}</h1>
    <ul>
      <li v-for="task in tasks" :key="task.id">
        {{ task.name }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  props: {
    title: String, // 接收标题
    tasks: Array,  // 接收任务列表数据
  },
};
</script>
详细说明
  1. 参数化设计
    通过 props 属性定义了组件的两个输入参数:

    • title:设置标题。
    • tasks:任务列表数据,类型为数组。
  2. 灵活复用
    TaskList 组件仅负责渲染传入的标题和任务数据,与具体的业务逻辑无关。因此,该组件可以复用到其他任务场景中,如“延迟任务列表”或“高优先级任务列表”。

  3. 可维护性提升
    未来,如果需要调整任务列表的展示样式或功能,只需更新 TaskList.vue 组件即可,无需在多个地方进行重复修改。

重用通用组件

我们用 TaskList 组件重写了 TodoListCompletedList 页面:

TodoList.vue

<template>
  <TaskList title="待办任务" :tasks="tasks" />
</template>

<script>
import TaskList from './TaskList.vue';

export default {
  components: { TaskList },
  props: {
    tasks: Array, // 待办任务数据
  },
};
</script>

CompletedList.vue

<template>
  <TaskList title="已完成任务" :tasks="tasks" />
</template>

<script>
import TaskList from './TaskList.vue';

export default {
  components: { TaskList },
  props: {
    tasks: Array, // 已完成任务数据
  },
};
</script>
详细说明
  1. 组件嵌套TodoListCompletedList 页面中嵌套了 TaskList 通用组件,只需传入对应的 props 即可完成数据绑定与渲染。

  2. 职责分离

    • TaskList:负责任务列表的渲染逻辑。
    • TodoListCompletedList:负责提供特定任务数据,充当业务逻辑与 UI 渲染的桥梁。
  3. 代码精简:页面组件的代码量大幅减少,变得更清晰易懂。

模拟数据与运行结果

模拟数据
在实际使用中,可以通过父组件传入任务数据:

const todoTasks = [
  { id: 1, name: "完成 Vue 教程" },
  { id: 2, name: "修复 Bug #1234" },
];

const completedTasks = [
  { id: 3, name: "提交 PR 到主分支" },
  { id: 4, name: "开会讨论需求" },
];

运行结果

  • TodoList.vue 页面将显示标题为“待办任务”的任务列表。
  • CompletedList.vue 页面将显示标题为“已完成任务”的任务列表。

配图可以显示组件在页面中的渲染效果,例如两个页面分别展示不同的任务。

通过代码重构,我们不仅优化了项目的代码结构,还为未来的功能扩展打下了基础。这种方法同样适用于其他框架(如 React、Angular)中的重复逻辑优化场景。

QA环节

  1. 如何识别代码中的重复逻辑?

    • 重复逻辑通常表现为类似的代码块出现在多个地方。
    • 可以通过工具(如代码审查工具)或团队代码评审来发现重复逻辑。
  2. 重构的最佳时机是什么?

    • 当代码复杂度增加或维护成本过高时。
    • 在开发新功能或修复 Bug 的过程中逐步重构。
  3. 重构是否会引入新 Bug?

    • 有可能。因此在重构后需要进行充分的单元测试和回归测试。

总结

代码重构是减少重复逻辑的重要手段,可以提升代码的可维护性和可扩展性。在 Vue 项目中,通过提取公共组件并参数化逻辑,可以有效减少代码重复,使代码结构更加清晰。

未来,随着代码静态分析工具和自动化重构工具的发展,代码重构将更加智能化和高效。同时,开发者应不断学习设计模式和编程规范,提升代码质量。

参考资料

  1. 《重构:改善既有代码的设计》 - Martin Fowler
  2. Vue 官方文档:https://vuejs.org
  3. 《代码整洁之道》 - Robert C. Martin

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2261253.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用户发送请求后服务端i/o工作过程

华子目录 服务端i/o介绍磁盘i/o机械磁盘的寻道时间、旋转延迟和数据传输时间常见的机械磁盘平均寻道时间值常见磁盘的平均延迟时间每秒最大IOPS的计算方法 网络i/o网络I/O处理过程磁盘和网络i/o 一次完整的请求在内部的执行过程 服务端i/o介绍 i/o在计算机中指Input/Output&am…

QT c++ 测控系统 一套报警规则(上)

本文适用于pc based的测控系统的上位机&#xff0c;定义了一套报警规则。 由5个部分组成&#xff1a;自定义4布尔类、在全局文件定义工位错误结构体和结构体变量&#xff0c;其它地方给此变量的当前值成员赋值&#xff0c;报警线程类、数据库保存类、弹框类。 1.自定义4布尔类…

概率论得学习和整理24:EXCEL的各种图形,统计图形

目录 0 EXCEL的各种图形&#xff0c;统计图形 1 统计图形 / 直方图 / 其实叫 频度图 hist最合适(用原始数据直接作图) 1.1 什么是频度图 1.2 如何创建频度图&#xff0c;一般是只选中1列数据&#xff08;1个数组&#xff09; 1.3 如何修改频度图的宽度 1.4 hist图的一个特…

项目二十三:电阻测量(需要简单的外围检测电路,将电阻转换为电压)测量100,1k,4.7k,10k,20k的电阻阻值,由数码管显示。要求测试误差 <10%

资料查找&#xff1a; 01 方案选择 使用单片机测量电阻有多种方法&#xff0c;以下是一些常见的方法及其原理&#xff1a; 串联分压法&#xff08;ADC&#xff09; 原理&#xff1a;根据串联电路的分压原理&#xff0c;通过测量已知电阻和待测电阻上的电压&#xff0c;计算出…

Linux中 vim 常用命令大全详细讲解

文章目录 前言一、Vim 基本操作 &#x1f579;️1.1 打开或创建1.2 退出编辑1.3 模式切换 二、Vim 光标移动命令 ↕️2.1 基本移动2.2 行内移动2.3. 单词移动2.4. 页面移动2.5. 行跳转 三、Vim 文本编辑命令 &#x1f4cb;3.1 插入和删除3.2 复制、剪切与粘贴3.3 替换与修改 四…

ARM架构服务器国产麒麟V10安装nginx

目前ARM架构服务器越来越多的出现在我们的工作中&#xff0c;尤其大数据时代的需要&#xff0c;服务器操作系统linux国产化进程的推进。本人已经编写了很多ARM架构下安装java环境&#xff0c;安装mysql&#xff0c;安装redis等等的文档。现在我们演示一下国产麒麟V10安装nginx-…

【SQL】语句练习

1. 更新 1.1单表更新 例1: 所有薪水低于30000的员工薪水增加10% SQL命令&#xff1a; update employee set salarysalary*1.1 where salary < 30000; 1.2多表更新 例1: 将下图两表张三的语文成绩从95修改为80 SQL命令&#xff1a; update exam set score80 where subjec…

【开源】使用环信UIKit for uniapp 做一个IM即时聊天应用

环信单群聊 UIKit 是基于环信即时通讯云 IM SDK 开发的一款即时通讯 UI 组件库&#xff0c;提供各种组件实现会话列表、聊天界面、联系人列表及后续界面等功能&#xff0c;帮助开发者根据实际业务需求快速搭建包含 UI 界面的即时通讯应用。 本文教大家使用环信 uniapp UIKit 快…

用 Python Turtle 绘制经典杰瑞鼠:捕捉卡通世界中的小聪明

用 Python Turtle 绘制经典杰瑞鼠&#xff1a;捕捉卡通世界中的小聪明 &#x1f438; 前言 &#x1f438;&#x1f41e;往期绘画>>点击进所有绘画&#x1f41e;&#x1f40b; 效果图 &#x1f40b;&#x1f409; 代码 &#x1f409; &#x1f438; 前言 &#x1f438; 杰…

Excel拆分脚本

Excel拆分 工作表按行拆分为工作薄 工作表按行拆分为工作薄 打开要拆分的Excel文件&#xff0c;使用快捷键&#xff08;AltF11&#xff09;打开脚本界面&#xff0c;选择要拆分的sheet&#xff0c;打开Module&#xff0c;在Module中输入脚本代码&#xff0c;然后运行脚本 Su…

ModStartCMS v9.1.0 数据Grid样式优化,富文本格式刷支持,精简代码

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用&#xff0c;支持后台一键快速安装&#xff0c;让开发者能快的实现业务功能开发。 系统完全开源&#xff0c;基于 Apache 2.0 开源协议&#xff0c;免费且不限制商业使用。 功能特性 丰富的模块市…

2024年12月16日Github流行趋势

项目名称&#xff1a;PDFMathTranslate 项目维护者&#xff1a;Byaidu reycn hellofinch Wybxc YadominJinta项目介绍&#xff1a;基于 AI 完整保留排版的 PDF 文档全文双语翻译&#xff0c;支持 Google/DeepL/Ollama/OpenAI 等服务&#xff0c;提供 CLI/GUI/Docker。项目star数…

3-机器人视觉-机器人抓取与操作

文章目录 3机器人视觉目录 1. 传感器和标定摄像头模型Intrinsic MatrixExtrinsic Matrix 标定内参标定手眼标定和外参标定 力传感器&其它传感器其它传感器 2. 神经网络和图像处理2D特征处理常见架构 训练流程推理流程部署流程2D 图像任务3D Point Cloud FeaturePointNet Ap…

Java String详解(二)

上一篇博客&#xff1a;Java String详解&#xff08;一&#xff09; 写在前面&#xff1a;大家好&#xff01;我是晴空๓。如果博客中有不足或者的错误的地方欢迎在评论区或者私信我指正&#xff0c;感谢大家的不吝赐教。我的唯一博客更新地址是&#xff1a;https://ac-fun.blo…

Qt之点击鼠标右键创建菜单栏使用(六)

Qt开发 系列文章 - menu&#xff08;六&#xff09; 目录 前言 一、示例演示 二、菜单栏 1.MenuBar 2.Menu 总结 前言 QMainWindow是一个为用户提供主窗口程序的类&#xff0c;包含一个菜单栏&#xff08;menubar&#xff09;、多个工具栏(toolbars)、一个状态栏(status…

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(一)

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(一) 你好&#xff0c;我是拉依达。 感谢所有阅读关注我的同学支持&#xff0c;目前博客累计阅读 27w&#xff0c;关注1.5w人。其中博客《最全Linux驱动开发全流程详细解析&#xff08;持续更新&#xff09;-CSDN博客》已经是 Lin…

IntelliJ IDEA(2024版) 的安装、配置与使用教程:常用配置、创建工程等操作(很详细,你想要的都在这里)

IDEA的安装、配置与使用&#xff1a; Ⅰ、IDEA 的安装&#xff1a;1、IDEA 的下载地址(官网)&#xff1a;2、IDEA 分为两个版本&#xff1a;旗舰版 (Ultimate) 和 社区版 (Community)其一、两个不同版本的安装文件&#xff1a;其二、两个不同版本的详细对比&#xff1a; 3、IDE…

MybatisPlus-配置加密

配置加密 目前配置文件中的很多参数都是明文&#xff0c;如果开发人员发生流动&#xff0c;很容易导致敏感信息的泄露。所以MybatisPlus支持配置文件的加密和解密功能。 我们以数据库的用户名和密码为例。 生成秘钥 首先&#xff0c;我们利用AES工具生成一个随机秘钥&#…

深度学习基础--将yolov5的backbone模块用于目标识别会出现怎么效果呢??

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 前言 yolov5网络结构比较复杂&#xff0c;上次我们简要介绍了yolov5网络模块&#xff0c;并且复现了C3模块&#xff0c;深度学习基础–yolov5网络结构简介&a…

数据结构---图(Graph)

图&#xff08;Graph&#xff09;是一种非常灵活且强大的数据结构&#xff0c;用于表示实体之间的复杂关系。在图结构中&#xff0c;数据由一组节点&#xff08;或称为顶点&#xff09;和连接这些节点的边组成。图可以用于表示社交网络、交通网络、网络路由等场景。 1. 基本概…