0

0

为什么干净的代码很重要

王林

王林

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

|

881人浏览过

|

来源于dev.to

转载

为什么干净的代码很重要

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

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

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

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

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

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

清洁代码的实用策略

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

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

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

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

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

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

干净代码的长期好处

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

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

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

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

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

乱码示例

应用程序= $应用程序;
  }

  公共函数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]);
  }
}

重构代码

威博仿淘宝多用户商城程序
威博仿淘宝多用户商城程序

威博仿淘宝多用商城程序于4月底发布公测以来,得到了广大用户的关注和支持,陆续有很多意见和建议反馈到威博网络技术部。广泛的关注与支持,也是威博仿淘宝多用商城程序不断进步的一个重要原因。威博网络有这么多忠实的支持者才会有今天的成绩。经过一个多月的在线测试,威博仿淘宝多用商城程序有望于6月底正式对外发布销售!这套购物网站源代码/购物网站系统免费下载--威博网络是在多用户网上商城系统的基础上,全面整合仿淘

下载

重构后的代码通过分解职责、使用依赖注入并遵循 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来解耦系统。
通过分离关注点,我们使每个方法专注于单个任务,使代码更易于阅读和维护。

结论

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

相关专题

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

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

1017

2023.10.19

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

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

62

2025.10.17

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

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

400

2025.12.29

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

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

388

2023.07.18

堆和栈区别
堆和栈区别

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

571

2023.08.10

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

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

27

2025.12.13

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

36

2026.01.14

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

16

2026.01.13

PHP 高性能
PHP 高性能

本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

34

2026.01.13

热门下载

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

精品课程

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

共48课时 | 1.8万人学习

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

共3课时 | 0.3万人学习

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

共1课时 | 793人学习

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

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