亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

How to clean your PHP code / 別寫重復(fù)代碼 (DRY)

別寫重復(fù)代碼 (DRY)

試著去遵循DRY 原則

盡你最大的努力去避免復(fù)制代碼,它是一種非常糟糕的行為,復(fù)制代碼 通常意味著當(dāng)你需要變更一些邏輯時,你需要修改不止一處。

試想一下,如果你在經(jīng)營一家餐廳并且你在記錄你倉庫的進(jìn)銷記錄:所有 的土豆,洋蔥,大蒜,辣椒等。如果你有多個列表來管理進(jìn)銷記錄,當(dāng)你 用其中一些土豆做菜時你需要更新所有的列表。如果你只有一個列表的話 只有一個地方需要更新。

通常情況下你復(fù)制代碼是應(yīng)該有兩個或者多個略微不同的邏輯,它們大多數(shù) 都是一樣的,但是由于它們的區(qū)別致使你必須有兩個或者多個隔離的但大部 分相同的方法,移除重復(fù)的代碼意味著用一個function/module/class創(chuàng) 建一個能處理差異的抽象。

用對抽象非常關(guān)鍵,這正是為什么你必須學(xué)習(xí)遵守在類章節(jié)寫 的SOLID原則,不合理的抽象比復(fù)制代碼更糟糕,所以務(wù)必謹(jǐn)慎!說了這么多, 如果你能設(shè)計一個合理的抽象,那就這么干!別寫重復(fù)代碼,否則你會發(fā)現(xiàn) 任何時候當(dāng)你想修改一個邏輯時你必須修改多個地方。

壞:

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()
        ]);
    }
}