Laravel 文檔和網(wǎng)上的各種教程,會教授我們同一個任務(wù),可以使用好幾種方法來完成。
對于框架設(shè)計(jì)而言,靈活是件好事,能提供給開發(fā)者不同的選項(xiàng),能讓框架適用更多的用戶場景。
但對于團(tuán)隊(duì)開發(fā)來說,大部分時候,更多的選項(xiàng)反而是累贅。因?yàn)槊總€人都可能寫出不一樣的代碼,這無疑增加了項(xiàng)目維護(hù)的難度,影響效率。
重點(diǎn): 規(guī)范化,其實(shí)就是在減少這些選項(xiàng)。選擇一個最優(yōu)的方案,然后所有人遵循,即可讓所有人編碼思維統(tǒng)一起來。
下面來舉一個例子說明,假如你在為項(xiàng)目開發(fā) 用戶授權(quán) 相關(guān)功能,僅 注冊用戶權(quán)限 這塊你就會有以下三個選項(xiàng):
你可以在 AuthServiceProvider
中使用 閉包注冊用戶權(quán)限
Gate::define('update-post', function (User $user, Post $post) {
return $user->id === $post->user_id;
});
你可以在 AuthServiceProvider
中指定 類方法注冊用戶權(quán)限
Gate::define('update-post', [PostPolicy::class, 'update']);
這個時候又有決策需要你去做:
SomeClass.php
? 放在哪個文件夾合適呢?你可以使用 Policy 授權(quán)策略類 來實(shí)現(xiàn)。如:
<?php
namespace App\Policies;
use App\Models\Post;
use App\Models\User;
class PostPolicy
{
/**
* 確定用戶是否可以更新給定的帖子
*
* @param \App\Models\User $user
* @param \App\Models\Post $post
* @return bool
*/
public function update(User $user, Post $post)
{
return $user->id === $post->user_id;
}
}
上面的例子,如果你獨(dú)自開發(fā)個人項(xiàng)目倒是問題不大,最多一兩年后回來看你的項(xiàng)目需要浪費(fèi)點(diǎn)時間熟悉而已。
然而,如果是在一個中大型的商業(yè)項(xiàng)目開發(fā)中,團(tuán)隊(duì)中有著幾個甚至十幾個開發(fā)者,沒有規(guī)范的情況下,開發(fā)者會根據(jù)各自的喜好去選擇,有時甚至出現(xiàn)一個開發(fā)者嘗試多個選項(xiàng)的可能,就會造成整個團(tuán)隊(duì)產(chǎn)出的代碼可讀性極低,代碼結(jié)構(gòu)混亂,也為后面的項(xiàng)目代碼的維護(hù)帶來了難度。
與其無休止的爭論哪種選項(xiàng)最好,還不如只知道 一種選項(xiàng)。這 一種選項(xiàng) 能覆蓋大部分的用例,且兼?zhèn)溟_發(fā)效率、程序執(zhí)行效率、擴(kuò)展性、安全性等最佳實(shí)踐,當(dāng)再次遇到此類需求時,毫不猶豫地使用這 一種選項(xiàng) 直接了當(dāng)?shù)亟鉀Q問題。
決策已提前做好,沒必要浪費(fèi)時間多次決策,節(jié)省時間,提高效率。
開發(fā)規(guī)范一旦統(tǒng)一,所有團(tuán)隊(duì)成員嚴(yán)格遵守,你會發(fā)現(xiàn),你的隊(duì)友寫的代碼就如你自己寫的一樣,編碼愉悅感提高了,整個項(xiàng)目代碼閱讀起來更加流暢,工作效率自然也會因此提高,同時代碼的健壯性也得到了保障。
更多建議: