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