日本电影一区二区_日本va欧美va精品发布_日本黄h兄妹h动漫一区二区三区_日本欧美黄色

Laravel 代碼簡潔之道(12-22)

Laravel 代碼簡潔之道(12-22)

12、避免使用助手類

有時候人們會使用類來歸類助手函數(shù),可要小心了,這可能會讓代碼變得更混亂。常見的做法是定義一個只包含一個作為助手函數(shù)使用的靜態(tài)方法的類。更好的做法是將這些方法放入具有具體邏輯的類中,或者是只將它們當做是全局函數(shù)。

// 壞的class Helper{ public function convertCurrency(Money $money, string $currency): self { $currencyConfig = config("shop.currencies.$currency"); $decimalDiff = ... return new static( (int) round($money->baseValue() * $currencyConfig[value] * 10**$decimalDiff, 0), $currency ); }}// 使用use AppHelper;Helper::convertCurrency($total, 'EUR');

// 好的class Money{ // 其他的 money/currency 邏輯 public function convertTo(string $currency): self { $currencyConfig = config("shop.currencies.$currency"); $decimalDiff = ... return new static( (int) round($this->baseValue() * $currencyConfig[value * 10**$decimalDiff, 0), $currency ); }}// 使用$EURtotal = $total->convertTo('EUR');

13、拿出一個周末來學習 OO

了解靜態(tài)(static)/ 實例(instance)方法和變量,還有私有的(private)/ 保護的(protected)/ 公共的(public)之間的可見性的區(qū)別。還要了解 Laravel 如何使用魔法方法。當你是初學者的時候可能不會很常用,但是隨著你的編碼水平增長,這些是至關重要的。

14、不要在類中只寫過程代碼

這將前面的推文與此處的其他提示聯(lián)系起來。OOP 的存在就是為了讓你的代碼更加具有可讀性,請使用 OOP。不要再在控制器中寫好幾百行的過程代碼了。

15、閱讀 SRP 之類的內(nèi)容,并進行合理的擴展

避免使用那種處理很多和當前類不相關邏輯的類,但是也不要為每件事都創(chuàng)建一個類。你是為了寫干凈的代碼,而不是想在每件事上都做分離。

16、避免函數(shù)中參數(shù)過多

當您看到具有大量參數(shù)的函數(shù)時,它可能意味著:

  1. 該函數(shù)包含太多職責,應該分離。
  2. 職責沒問題,但你應該學會重構他的長簽名.

以下是修復第二種情況的兩種策略.

17、使用數(shù)據(jù)傳輸對象 (DTO)

與其以特定順序傳遞大量參數(shù),不如考慮創(chuàng)建一個具有屬性的對象來存儲這些數(shù)據(jù)。 如果您發(fā)現(xiàn)某些行為可以移入此對象,則可以加分。

// 糟糕的示例public function log($url, $route_name, $route_data, $campaign_code, $traffic_source, $referer, $user_id, $visitor_id, $ip, $timestamp){ // ...}

// 推薦的示例public function log(Visit $visit){ // ...}class Visit{ public string $url; public string $routeName; public array $routeData; public string $campaign; public array $trafficSource[]; public string $referer; public string $userId; public string $visitorId; public string $ip; public Carbon $timestamp; // ...}

18、創(chuàng)建流式對象

你可以使用流式 API 來創(chuàng)建對象。使用單獨的方法調(diào)用來逐漸添加數(shù)據(jù),并且只要構造函數(shù)中的絕對最小值。正是因為每個方法都返回 $this ,你可以在任意一次調(diào)用后讓整個流程停下來。

Visit::make($url, $routeName, $routeData) ->withCampaign($campaign) ->withTrafficSource($trafficSource) ->withReferer($referer) // ... 等等

19、使用自定義集合

創(chuàng)建自定義集合可以更好地寫出更富有表現(xiàn)力的語法。參考這個訂單合計的示例:

// 壞的$total = $order->products->sum(function (OrderProduct $product) { return $product->price * $product->quantity * (1 $product->vat_rate);});

// 好的$order->products->total();class OrderProductCollection extends Collection{ public function total() { $this->sum(function (OrderProduct $product) { return $product->price * $product->quantity * (1 $product->vat_rate); }); }}

20、不要使用縮寫

不要覺得很長的變量名 / 方法名就是不對的,才不是這樣,它們很有表現(xiàn)力。使用一個長的方法名比短的更好,配合查閱文檔能更完整地了解它的功能。變量也是如此。不要使用無意義的幾個字母的縮寫。

// 壞的$ord = Order::create($data);// ...$ord->notify();

// 好的$order = Order::create($data);// ...$order->sendCreatedNotification();

21、嘗試在控制器中只使用 CURD 動作

如果可以的話,只使用控制器中的 7 個 CURD 動作,通常來說會更少。不要在控制器中創(chuàng)建 20 多個方法,更短的控制器更好一些。

22、使用更具有表現(xiàn)力的方法名稱

考慮「這個對象可以完成什么事情」,而不是「這個對象能做什么」。也會有例外,比如操作類。這是個很好的經(jīng)驗。

// 壞的$gardener->water($plant);$orderManager->lock($order);// 好的$plant->water();$order->lock();

相關新聞

聯(lián)系我們
聯(lián)系我們
公眾號
公眾號
在線咨詢
分享本頁
返回頂部
喀什市| 大竹县| 惠水县| 星子县| 乌兰察布市| 金坛市| 共和县| 嘉善县| 靖安县| 龙山县| 乌兰浩特市| 叙永县| 太白县| 曲阳县| 喀喇沁旗| 安义县| 抚顺县| 巴东县| 沂水县| 罗山县| 余江县| 大连市| 察雅县| 清水县| 同心县| 禄丰县| 清新县| 贵溪市| 佛坪县| 陆川县| 新野县| 芦山县| 九台市| 淮阳县| 普定县| 蓝田县| 梅河口市| 富顺县| 成都市| 海丰县| 苏尼特右旗|