Home  >  Article  >  Backend Development  >  PHP Talk "Refactoring - Improving the Design of Existing Code" Part 3 Reorganizing Data_PHP Tutorial

PHP Talk "Refactoring - Improving the Design of Existing Code" Part 3 Reorganizing Data_PHP Tutorial

WBOY
WBOYOriginal
2016-07-21 15:19:02806browse

思维导图


介绍

 
 承接上文的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变成对象。
 

 

 
  动机:
 

开发初期,我们也许会使用基本数据类型表示简单的行为。例如:你可能会用一个字符串表示电话号码,但是随后可能会出现电话号码的“格式化“,”验证“,”抽取区号“之类的特殊行为。——这时候我们就需要一个新类。

 
 Replace Array with Object
 
状况:你有一个数组,数组中的元素各自代表不同的东西,那么以对象替换数组,对于数组中的每个元素,以一个值域表示之。
 

Motive:

Arrays are often used for a group of similar objects. If the elements in the array are different, it is difficult to understand the convention that the first element in the array is a person's name. Objects are different, and such information can be conveyed through domain names and function names. ——This way there is no need to memorize it by rote and no need to annotate it.

Encapsulate Field
Status: If there is a public value field in your class, declare it as pirvate and provide the corresponding access function.

Motive:

One of the principles of object-oriented is encapsulation (Encapsulate) or "data hiding". According to this original test, you should never declare data as public.
——Public data is considered a bad practice.
 ——If it is encapsulated, the code modification will be simpler because it is all concentrated in one place.
A function does not provide other behaviors except access functions (getting/setting). It is just a dumb class after all. This type of class cannot gain the advantages of object technology. ——The solution to dumb classes is Move Method to quickly move them to new objects.
conclusion
I hope to share what I understand with everyone, and welcome your valuable opinions.

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/325369.htmlTechArticleMind map introduction follows the reorganization of the above PHP chat "Refactoring-Improving the Design of Existing Code" Your function continues to be refactored. This chapter mainly focuses on data reconstruction. ...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn