gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

思维导图  。

介绍 。

  。

 承接上文的PHP 杂谈《重构-改善既有代码的设计》之 重新组织你的函数继续重构方面的内容.

  。

这章主要针对数据的重构.

  。

1、争论的声音——直接访问Field还是通过函数(Accessor)访问Field 。

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

 2.修改Array为Object:当你看到一个Array很像一个数据结构,你可以使用Replace Array with Object,把Array变成一个对象。——数据结构更清晰.

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

  。

  。

 专业术语 。

  。

accessor:访问者,存储器——在本文翻译为“函数” 。

dumb:哑 。

domain class:用以处理业务逻辑 。

presentation class:用以处理”数据表现形式“ 。

business logic:业务逻辑 。

unidirectional:单向的 。

bidirectional:双向的 。

collection:群集 。

 Self Encapsulate Field 。

  。

状况:如果Client直接访问值域,会造成Client与值域之间的耦合关系逐渐变得笨拙,那么为这个值域建立取值/设置函数,并且只以这些函数来访问.

  。

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

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

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

  。

动机:

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

  “间接访问变量”:支持更灵活的数据获取方式,如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变成对象.

  。

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

  。

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

  。

  动机:

  。

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

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

 Replace Array with Object 。

  。

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

  。

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

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

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

 动机:

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

数组常用于一组相似对象。如果数组中的元素不同,很难明白数组中的第一个元素是人名这样的约定。对象就不同了,可以通过值域名称和函数名称传达这样的信息。——这样无须死记,无须注释.

 Encapsulate Field 。

  。

状况:如果你的class中有一个public值域,那么将它声明为pirvate,并提供相应的访问函数.

  。

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

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

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

 动机:

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

面向对象的原则之一就是封装(Encapsulate)或者称为”数据隐藏“。按照此原测,你绝不应该把数据声明为public.

  ——public 数据被看成是一种不好的做法.

  ——如果封装了,代码的修改就会比较简单,因为都集中在一个地方.

 一个函数除了访问函数(getting/setting)外,不提供其他行为,它终究只是一个dumb class(哑类)。这类class不能获得对象技术的优势。——解决哑类的方法是Move Method轻快的将它们移到新对象去.

  。

 conclusion 。

  。

我希望能把我理解的东西与大家分享,欢迎大家提出宝贵意见.

  。

最后此篇关于PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据的文章就讲到这里了,如果你想了解更多关于PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com