重複したコードを書かない(DRY)


DRY 原則に従うようにしてください

コードの重複を避けるために最善を尽くしてください。これは非常に悪い行為です。コードの重複は、通常、ロジックを変更する必要があるときに、それを変更する必要があることを意味します。一箇所。

あなたがレストランを経営していて、倉庫のすべてのジャガイモ、タマネギ、ニンニク、ピーマンなどの売買を記録していると想像してください。購入と販売を管理するために複数のリストがある場合は、ジャガイモの一部を使って料理するときにすべてのリストを更新する必要があります。リストが 1 つしかない場合、更新する場所は 1 つだけです。

通常、コードをコピーするときは、わずかに異なる 2 つ以上のロジックが必要です。それらのほとんどは同じですが、相違点があるため、2 つ以上を分離する必要があります。コードの重複とは、関数/モジュール/クラスを使用して、相違点を処理できる抽象化を作成することを意味します。

適切な抽象化を使用することは重要です。そのため、クラスの章に記載されている 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);
    }
}

#優れた:

コードをもっとコンパクトにした方が良いです

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