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

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

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

試著去遵循DRY 原則

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

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

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

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

壞:

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

極好:

最好讓代碼緊湊一點(diǎn)

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