The Art of Readable Code && High Performance Comments

** 這是編輯於 2011 年 2 月的草稿,廢物利用照刊 **

// 原文 (2011/02) 開始

Partial Class 是一項在 .Net Framework 2.0 出現的特色,可以將一個 Class 的內容由不同檔案實作。除了最原始的需求,整合工具自動產生的程式碼以及自身篆寫的 code (還記得 VC 6.0 年代,那堆自動產生的代碼吧) 之外,也能在多人協同開發同一物件時,各自編輯一個檔案,簡化 lock / merge 的問題。雖然 Partial Class 有其強項,不過它並不適合用於取代物件繼承與抽象化。

PHP  沒有 Partial Class ,但在實作套件 (擴充) 功能時,它還真 TMD 好用 ! 舉例來說,使用者資料可能存在 $_session[‘cuser’] 裡頭,而它是 Class User 的 instance;隨著使用的 plugin 越來越多,cuser 裡需要的欄位也跟著增加 — 偏偏每套 plugin 都應該不知道也不在意其它 plugins 的狀態 (資料的封裝),這以全然 OO 的思維來看是無解的,只能讓每套 plugin 儲存各自的狀態。醜斃了 !

雖然 PHP 不提供,不過這個功能可以透過 magic method 來實作:

// 原文結束

後記:

上面的 code 我沒重看過,有錯麻煩指正下 XD

PHP 在 5.4 推出的功能 Trait 補上了這個缺口,從此套件對原有物件的修改,只要增加引入套件自身的 trait,就能解決。

在許多框架中是以 namespace (PHP 5.3) 的概念,讓設計師能在不更動 core code 的前提下,覆蓋 core class。在多方(套件)都需要覆蓋基底物件時,這沒有太大幫助;透過 interface 搭配特定 design pattern 也能達成需求,然而 Trait 的實作語法接近繼承,因此能減低 pattern 的困擾。

發表迴響

分類

%d 位部落客按了讚: