PHP 雜談《重構-改善既有代碼的設計》之三 重新組織資料PHP 雜談《重構-改善既有代碼的設計》之 重新組織你的函數

來源:互聯網
上載者:User
  思維導圖 

  介紹  承接上文的PHP 雜談《重構-改善既有代碼的設計》之 重新組織你的函數繼續重構方面的內容。 這章主要針對資料的重構。 1、爭論的聲音——直接存取Field還是通過函數(Accessor)訪問Field

 2.修改Array為Object:當你看到一個Array很像一個資料結構,你可以使用Replace Array with Object,把Array變成一個對象。——資料結構更清晰。

   專業術語 

accessor:訪問者,儲存空間——在本文翻譯為“函數”

dumb:啞

domain class:用以處理商務邏輯

presentation class:用以處理”資料表現形式“

business logic:商務邏輯

unidirectional:單向的

bidirectional:雙向的

collection:群集

 Self Encapsulate Field 狀況:如果Client直接存取範圍,會造成Client與範圍之間的耦合關係逐漸層得笨拙,那麼為這個範圍建立取值/設定函數,並且只以這些函數來訪問。 

 

動機:

  “間接訪問變數”:支援更靈活的資料擷取方式,如lazy Initialization(意思是只有用到值時,才對它進行初始化。)

  “直接存取變數”:代碼比較容易閱讀,不需要停下來說:“啊,這隻是個存取子”。

       選擇:1、代碼規範,按照團隊中大多數人的做法去做。

     2、個人比較喜歡“直接存取變數”,直到這種方式帶來麻煩為止。

       martin(作者)的例子:你想擷取superclass中的field,卻又想在subclass中將該field改為計算後的值,這就最該使用Self Encapsulate Field。

                         我自己的例子:我一般會把field設定成private,如果外部變數,需要用到此field的時候,我就會用Self Encapsulate Field。或者field的值有變化的時候,用Self Encapsulate Field。

 Replace Data Value with Object  狀況:如果你的某個基本類型的field,需要額外的資料和行為,那麼將此field變成對象。 

 

   動機: 

開發初期,我們也許會使用基礎資料型別 (Elementary Data Type)表示簡單的行為。例如:你可能會用一個字串表示電話號碼,但是隨後可能會出現電話號碼的“格式化“,”驗證“,”抽取區號“之類的特殊行為。——這時候我們就需要一個新類。

 

 Replace Array with Object 狀況:你有一個數組,數組中的元素各自代表不同的東西,那麼以對象替換數組,對於數組中的每個元素,以一個範圍表示之。 

 動機:

數組常用於一組相似對象。如果數組中的元素不同,很難明白數組中的第一個元素是人名這樣的約定。對象就不同了,可以通過範圍名稱和函數名稱傳達這樣的資訊。——這樣無須死記,無須注釋。

 Encapsulate Field 狀況:如果你的class中有一個public範圍,那麼將它聲明為pirvate,並提供相應的訪問函數。


 動機:

物件導向的原則之一就是封裝(Encapsulate)或者稱為”資料隱藏“。按照此原測,你絕不應該把資料聲明為public。  ——public 資料被看成是一種不好的做法。  ——如果封裝了,代碼的修改就會比較簡單,因為都集中在一個地方。 一個函數除了訪問函數(getting/setting)外,不提供其他行為,它終究只是一個dumb class(啞類)。這類class不能獲得對象技術的優勢。——解決啞類的方法是Move Method輕快的將它們移到新對象去。  conclusion 我希望能把我理解的東西與大家分享,歡迎大家提出寶貴意見。 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.