DRY 编程原则

未匹配的标注

尝试遵循 DRY 原则。

尽最大努力避免重复代码。重复代码是不好的,因为这意味着如果要更改某些逻辑,你需要更改多个地方的内容。

想象一下,如果你经营了一家餐厅并记录了你的库存:所有的西红柿,洋葱,大蒜, 香料等。如果你有多个清单并记录了它,当你上了一道西红柿菜品,这时所有的清单必须被更新。如果你只有一个清单,那么只更新一个地方!

你经常写重复的代码,是因为你有两个或多个略微不同的事情,它们有很多共同之处,但是它们的不同迫使你有两个或多个独立的函数去处理相同的事情。删除重复代码意味着创建一个能够处理这些不同设置的抽象,只需一个函数/模块/类就可以。

正确的抽象至关重要,这就是为什么你应该遵循 Classes 部分中列出的 SOLID 原则。不好的抽象比重复代码还要糟糕,所以要小心! 话虽如此,如果你能做一个好的抽象,那就去做吧!不要重复自己,否则你会发现自己在任何时候想改变一件事时都会更新多个地方。

坏的:

function showDeveloperList(array $developers): void
{
    foreach ($developers as $developer) {
        $expectedSalary = $developer->calculateExpectedSalary();
        $experience = $developer->getExperience();
        $githubLink = $developer->getGithubLink();
        $data = [$expectedSalary, $experience, $githubLink];

        render($data);
    }
}

function showManagerList(array $managers): void
{
    foreach ($managers as $manager) {
        $expectedSalary = $manager->calculateExpectedSalary();
        $experience = $manager->getExperience();
        $githubLink = $manager->getGithubLink();
        $data = [$expectedSalary, $experience, $githubLink];

        render($data);
    }
}

好的:

function showList(array $employees): void
{
    foreach ($employees as $employee) {
        $expectedSalary = $employee->calculateExpectedSalary();
        $experience = $employee->getExperience();
        $githubLink = $employee->getGithubLink();
        $data = [$expectedSalary, $experience, $githubLink];

        render($data);
    }
}

非常好:

It is better to use a compact version of the code.

function showList(array $employees): void
{
    foreach ($employees as $employee) {
        render([$employee->calculateExpectedSalary(), $employee->getExperience(), $employee->getGithubLink()]);
    }
}

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/clean-code-php/...

译文地址:https://learnku.com/docs/clean-code-php/...

上一篇 下一篇
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
贡献者:2
讨论数量: 0
发起讨论 查看所有版本


暂无话题~