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