複雜的商業邏輯,通常會有很多的共用程式碼,來提高商業邏輯的可讀性和可修改度。
今天,我們從共用程式碼的角度,來看看怎麼寫出讓專案難以維護的程式碼。
首先,最簡單的做法,就是不共用程式碼。
在不同的地方重複寫一模一樣的邏輯,這樣一旦共用邏輯需要修改的話,就必須修改每個寫的地方。
搭配上之前說過的技巧,比方說一個函式要幾千行起跳,這可以讓維運的工程看到時,直接舉起雙手投降!
Laravel 針對減少物件之間的依賴,有著很不錯的依賴注入設計,用的好的話,可以避免掉類別之間互相依賴的問題。
如果我們對共用的程式碼,不透過拆分 service 然後依賴注入的方式設計,而是用 private method 的方法處理拆分,那麼我們就可以保證這段邏輯很難離開這個類別,進而保證了這段共用邏輯的難以維護。
Contextual Binding 是 Laravel 提供的一個 utility,可以在不同的 Controller 內,即使在建構子裡面宣告一樣的界面,實際拿到的是不一樣的實體物件
$this->app->when(PhotoController::class)
->needs(Filesystem::class)
->give(function () {
return Storage::disk('local');
});
$this->app->when([VideoController::class, UploadController::class])
->needs(Filesystem::class)
->give(function () {
return Storage::disk('s3');
});
善加利用的話,可以讓之後維護的工程想破頭,也不知道為什麼一樣的宣告,可以拿到兩個不一樣的類別。