類別
比較大的函式
我會把 Class 分成兩種
函式庫(library)
元件(component)
函式庫
像是 Laravel 的 Controller,可以任意建立 public methods。
元件
Laravel 大部分的功能都是元件,像是 Command、ServiceProvider、Middleware,會要你實作或覆寫某些方法。當然,你也可以把這種元件當函式庫來擴充,結果程式碼就會很髒。
這些元件都是根據 SOLID 物件導向設計原則來設計的。
直接解釋 SOLID 除了很難懂外,還又臭又長,所以從結果講重點:
藉由抽象類別(abstract class)或介面(interface)限制可被使用的功能,這樣可以把所有實作功能抽象成同一件事。
元件是從抽象開始被理解和設計,所以元件必須實作(implement)於抽象類別或介面。
如果不在抽象類別和介面的規範內,必須封裝(defind to private)。
元件本身必須是單數,單數比較好理解和使用
函式庫 vs 元件
函式庫剛開始寫起來很快很方便,但久了會很難維護,甚至裡面的方法可能沒有任何關聯性。元件剛開始要花時間規劃,但對於之後使用的人來說會很友善,因為能用的功能都寫在抽象層裡。
通常函式庫或函式過於複雜的時候,就會重新設計成幾個物件來簡化流程。像是,購物車的贈品條件計算就很適合單獨寫成一個元件,這個元件大概會有這些功能:
若沒使用元件,就可能是幾個變數在好幾個地方遊走,除了分散開發者的注意力外,也很難寫測試和擴充,這也是大多系統隱藏的技術債。
Last updated