0

0

为什么干净的代码很重要

王林

王林

发布时间:2024-07-10 13:12:24

|

881人浏览过

|

来源于dev.to

转载

为什么干净的代码很重要

在各种咨询项目中,我最近注意到同样的事情不断重复:集群代码。我这么说是什么意思?好吧,让我这样说。当你编码时,你应该考虑干净的代码。是的,我知道,又有一个人在谈论干净的代码。你为什么要听我的?从 12 岁起,我就对计算机及其工作原理感兴趣。当我 15 岁时,我开始观看 Pluralsight,这是一堆关于如何进行 MVVM、MVC、架构等的视频。我看了很多视频,但我还不知道如何编程。我跟着做了,但我记得很多事情都不明白。

在过去的几年里,我一直在多家公司担任架构师和高级软件开发人员。我的背景是计算机工程和 IT 学徒。正如你们所知,我试图与你们分享我所知道的东西,以帮助人们,同时也像 LinkedIn 上的所有人一样获得曝光。是的,他们并不像你想象的那么热爱写作;这纯粹是一种商业模式。但这并不重要,对吧?所以就这样了。希望有一天您会购买我的一款产品。 ;)

现在,让我告诉你我最近在不同项目中看到的情况。我认为干净的代码并不总是被应用的原因并不一定是因为人们不具备相关知识。这通常与严格的期限和来自不同项目的压力有关。如果您是像我一样的软件工程师或项目经理,您就会知道项目的成功需要一定的限制和时间压力。

为了交付给客户,即使在内部工作,您也会面临截止日期和不同的利益相关者。公司通常采用订阅模式运营,客户定期期待新功能。这带来了很多挑战。开发人员和项目规划人员需要保持项目向前发展,而不要陷入架构债务的陷阱,因为他们没有足够的时间来正确思考解决方案。

一旦出现这个问题,就很难回去解决它。根据我的经验,人们不会经常回去重构他们的项目——至少我认识的人不会。如果您有不同,请告诉我。你可以做很多事情来重构,这很有帮助,但问题是它没有优先考虑。如果代码可以工作并且客户满意,那么重构就不是首要任务。但让我们想想未来两三年。一旦代码变得越来越集群会发生什么?

你最终可能会雇佣很多开发人员将单体架构改造成微服务架构,这会花费很多钱。这就是为什么你应该考虑干净的代码——不仅仅是当你开始一个项目时,不仅仅是当你醒来时,而是一直如此。因为如果你不应用它,最终它会回来咬你。

清洁代码的实用策略

一致的代码审查
定期代码审查可确保遵守编码标准并及早发现潜在问题。

自动化测试
实施自动化测试,包括单元测试、集成测试和端到端测试,有助于在问题投入生产之前发现问题。

定期重构
在项目计划中留出专门用于重构的时间,以防止技术债务累积并保持代码库的可维护性。

采用坚实的原则
SOLID 原则(单一职责、开闭、里氏替换、接口隔离和依赖反转)提供了一个用于编写干净且可维护的代码的框架。

清晰的文档
编写清晰简洁的文档可以帮助新开发人员更快地理解代码库并减少引入错误的可能性。

结对编程
结对编程允许两个开发人员一起处理相同的代码,尽早发现错误并在团队成员之间共享知识。

干净代码的长期好处

降低维护成本
干净的代码更容易维护,减少修复错误和实现新功能所花费的时间和金钱。

增强可读性和可理解性
干净的代码库更容易阅读和理解,这对于新开发人员的入职和项目的长期可持续性至关重要。

提高性能
结构良好的代码可以避免不必要的复杂性并优化资源使用,从而带来更好的性能。

更大的可扩展性
干净的代码可以更轻松地扩展应用程序,简化添加新功能和适应不断变化的需求的过程。

提高开发者满意度
使用干净的代码可以减少开发人员的挫败感并提高工作满意度,从而提高生产力并降低流动率。

乱码示例

<?php

User 类扩展了 securitySession
{
  受保护的$应用程序;

  公共函数 __construct($app)
  {
    $这个->应用程序= $应用程序;
  }

  公共函数addSkill(应用程序$app,请求$request)
  {
    $userInput['id'] = $request->request->get('id', null);
    $userInput['id'] = preg_replace("/[^0-9,.]/", "", $userInput['id']);

    $app['checkpoint']->minimumRole(1);
    $user = $app['session']->get('user', []);
    $userId = $user['个人资料']['easyJobAddressId'];

    if ($userInput['id'] === null) {
      返回 $app->json(['ok' => true]);
    }

    $app['dbs']['appMySql']->insert('技能', [
      'skillId' => $userInput['id'],
      '用户ID' => $用户ID,
      '排名' => 0
    ]);

    返回 $app->json(['ok' => true]);
  }
}

重构代码

Tago AI
Tago AI

AI生成带货视频,专为电商卖货而生

下载

重构后的代码通过分解职责、使用依赖注入并遵循 SOLID 原则,遵循干净代码原则。

依赖注入和构造函数

公共函数 __construct(
    UserRoleService $userRoleService, RequestStack $requestStack,
    用户存储库 $用户存储库,
    EasyJobServiceInterface $easyJobService,
    技能存储库 $skillsRepository,
    应用程序数据服务$appDataService
){
    $this->userRoleService = $userRoleService;
    $this->requestStack = $requestStack;
    $this->userRepository = $userRepository;
    $this->easyJobService = $easyJobService;
    $this->skillsRepository = $skillsRepository;
    $this->appDataService = $appDataService;
}

通过注入依赖关系,我们确保每个类都有单一的职责,并且可以轻松测试和维护。

添加技能的单一职责

#[路线('/profile/experience/add', name: 'profile_experience_add', 方法: ['POST'])]
公共函数addExperience(请求$请求):JsonResponse
{
    $this->denyAccessUnlessGranted('ROLE_USER');
    $skillId = $request->request->get('id');

    if (!is_numeric($skillId)) {
        return $this->json(['status' => 'error', 'message' => '技能 ID 无效']);
    }

    $userId = $this->getUser()->getId();
    $result = $this->appDataService->addSkillToUser($userId, (int) $skillId);

    返回 $this->json(['status' => 'ok', 'added' => $result]);
}

这里,我们使用专门的方法来处理技能的添加。它确保验证并遵循干净、简洁的结构。

关注点分离

公共函数index():响应{
    $user = $this->getUser();
    $userId = $user->getId();

    $allSkills = [90, 10, 11, 12, 13, 20, 21, 22, 23, 30, 31];
    $skills = array_fill_keys($allSkills, 0);

    $userSkills = $this->appDataService->getSkillsByUserId($userId);
    foreach ($userSkills 作为 $skill) {
        $skillId = $skill->getSkillId();
        if (array_key_exists($skillId, $skills)) {
            $技能[$skillId] = 1;
        }
    }
}

注意我们如何使用appDataService来解耦系统。
通过分离关注点,我们使每个方法专注于单个任务,使代码更易于阅读和维护。

结论

总之,始终考虑干净的代码。现在看起来可能并不紧急,但忽视它可能会导致严重的问题。优先考虑干净的代码将在未来节省时间、金钱和麻烦。定期重构并遵守编码标准是维护健康代码库的关键。请记住,您今天为编写干净代码所付出的努力从长远来看将会得到回报,使您的项目更具可扩展性、可维护性并且工作起来更加愉快。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1926

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

656

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2395

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

47

2026.01.19

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

443

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

605

2023.08.10

PHP 命令行脚本与自动化任务开发
PHP 命令行脚本与自动化任务开发

本专题系统讲解 PHP 在命令行环境(CLI)下的开发与应用,内容涵盖 PHP CLI 基础、参数解析、文件与目录操作、日志输出、异常处理,以及与 Linux 定时任务(Cron)的结合使用。通过实战示例,帮助开发者掌握使用 PHP 构建 自动化脚本、批处理工具与后台任务程序 的能力。

66

2025.12.13

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

38

2026.03.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 2.5万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 848人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号