PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据
思维导图
介绍
专业术语
accessor:访问者,存储器——在本文翻译为“函数”
dumb:哑
domain class:用以处理业务逻辑
presentation class:用以处理”数据表现形式“
business logic:业务逻辑
unidirectional:单向的
bidirectional:双向的
collection:群集
Self Encapsulate Field
动机:
“间接访问变量”:支持更灵活的数据获取方式,如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
开发初期,我们也许会使用基本数据类型表示简单的行为。例如:你可能会用一个字符串表示电话号码,但是随后可能会出现电话号码的“格式化“,”验证“,”抽取区号“之类的特殊行为。——这时候我们就需要一个新类。
Replace Array with Object
动机:
数组常用于一组相似对象。如果数组中的元素不同,很难明白数组中的第一个元素是人名这样的约定。对象就不同了,可以通过值域名称和函数名称传达这样的信息。——这样无须死记,无须注释。
Encapsulate Field
动机:
(转发请注明转自:学PHP)
- PHP 杂谈《重构-改善既有代码的设计》之四 简化条件表达式 (2012-09-18 16:54:33)
- PHP设计模式概念 (2012-09-27 22:39:08)
- 网络编程常用设计模式 (2012-10-08 23:13:50)
- 排序算法总结 (2012-10-08 23:16:23)
- 深度学习(Deep Learning)算法简介 (2012-11-13 23:26:19)
- HDU 1051 贪心算法 (2012-08-01 00:04:47)
- HDU2647(逆向拓扑排序) (2012-08-01 00:04:43)
- 基于用户投票的排名算法 (2012-07-16 12:04:40)
- 排序算法学习 (2012-07-15 19:17:40)
- 五种常见的 PHP 设计模式 (2012-05-04 18:04:45)
- 1楼 Joan说: 2016-06-07 05:49:02
-
An answer from an expert! Thanks for cotutibrning.
- 2楼 Lakiesha说: 2016-12-22 06:01:08
-
Never seen a betetr post! ICOCBW
- 3楼 Lakiesha说: 2016-12-22 06:01:31
-
Never seen a betetr post! ICOCBW