日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据

發(fā)布時間:2023/11/30 php 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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

2.修改Array為Object:當你看到一個Array很像一個數(shù)據(jù)結構,你可以使用Replace Array with Object,把Array變成一個對象。——數(shù)據(jù)結構更清晰。

專業(yè)術語

accessor:訪問者,存儲器——在本文翻譯為“函數(shù)”

dumb:啞

domain class:用以處理業(yè)務邏輯

presentation class:用以處理”數(shù)據(jù)表現(xiàn)形式“

business logic:業(yè)務邏輯

unidirectional:單向的

bidirectional:雙向的

collection:群集

Self Encapsulate Field 狀況:如果Client直接訪問值域,會造成Client與值域之間的耦合關系逐漸變得笨拙,那么為這個值域建立取值/設置函數(shù),并且只以這些函數(shù)來訪問。

?

動機:

  “間接訪問變量”:支持更靈活的數(shù)據(jù)獲取方式,如lazy Initialization(意思是只有用到值時,才對它進行初始化。)

  “直接訪問變量”:代碼比較容易閱讀,不需要停下來說:“啊,這只是個取值函數(shù)”。

?????? 選擇:1、代碼規(guī)范,按照團隊中大多數(shù)人的做法去做。

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

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

???????????????????????? 我自己的例子:我一般會把field設置成private,如果外部變量,需要用到此field的時候,我就會用Self Encapsulate Field?;蛘遞ield的值有變化的時候,用Self Encapsulate Field。


Replace Data Value with Object 狀況:如果你的某個基本類型的field,需要額外的數(shù)據(jù)和行為,那么將此field變成對象。

?

動機:

開發(fā)初期,我們也許會使用基本數(shù)據(jù)類型表示簡單的行為。例如:你可能會用一個字符串表示電話號碼,但是隨后可能會出現(xiàn)電話號碼的“格式化“,”驗證“,”抽取區(qū)號“之類的特殊行為。——這時候我們就需要一個新類。

? Replace Array with Object 狀況:你有一個數(shù)組,數(shù)組中的元素各自代表不同的東西,那么以對象替換數(shù)組,對于數(shù)組中的每個元素,以一個值域表示之。

?動機:

數(shù)組常用于一組相似對象。如果數(shù)組中的元素不同,很難明白數(shù)組中的第一個元素是人名這樣的約定。對象就不同了,可以通過值域名稱和函數(shù)名稱傳達這樣的信息?!@樣無須死記,無須注釋。

Encapsulate Field 狀況:如果你的class中有一個public值域,那么將它聲明為pirvate,并提供相應的訪問函數(shù)。

?動機:

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

轉載于:https://www.cnblogs.com/phpdragon/archive/2013/04/08/3006536.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結

以上是生活随笔為你收集整理的PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。