`

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

 
阅读更多
 思维导图
 

 
 介绍
 
 
这章主要针对数据的重构。
 
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
 
状况:你有一个数组,数组中的元素各自代表不同的东西,那么以对象替换数组,对于数组中的每个元素,以一个值域表示之。
 

 动机:

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

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

 动机:

面向对象的原则之一就是封装(Encapsulate)或者称为”数据隐藏“。按照此原测,你绝不应该把数据声明为public。
  ——public 数据被看成是一种不好的做法。
  ——如果封装了,代码的修改就会比较简单,因为都集中在一个地方。
 一个函数除了访问函数(getting/setting)外,不提供其他行为,它终究只是一个dumb class(哑类)。这类class不能获得对象技术的优势。——解决哑类的方法是Move Method轻快的将它们移到新对象去。
分享到:
评论

相关推荐

    重构-改善既有代码的设计

    第8章 重新组织数据 169 8.1 Self Encapsulate Field(自封装字段) 171 8.2 Replace Data Value with Object(以对象取代数据值) 175 8.3 Change Value to Reference(将值对象改为引用对象) 179 8.4 ...

    重构-改善既有代码质量

    《重构-改善既有代码质量》一书是Martin Fowler的经典之作,它深入探讨了如何通过重构技术来提升软件的可读性、可维护性和整体质量。重构是一个系统化的过程,旨在改进代码结构,而不改变其外在行为。在这个过程中,...

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

    在PHP编程中,重构是提升代码质量和可维护性的重要手段,尤其在《重构-改善既有代码的设计》一书中,作者提出了许多重构策略。本篇PHP杂谈将继续探讨关于数据重构的几个关键点,包括如何更好地组织和管理数据,以及...

    重构 _改善既有代码的设计(中文版) pdf

    《重构:改善既有代码的设计》是一本由Martin Fowler撰写的经典软件工程书籍,其核心思想是通过一系列小的重构步骤来改善和优化既有代码的质量。在软件开发领域中,重构是一个重要的技术,它可以帮助开发人员提升...

    重构-改善既有代码的设计-课件.ppt

    ### 重构——改善既有代码的设计 #### 一、重构的概念 重构是对软件内部结构的一种调整,目的是在不改变外部行为的前提下,提高代码的可理解性和降低未来的修改成本。这一过程通常涉及对现有代码进行严谨而有序的...

    重构-改善既有代码的设计 中文版

    第8章 重新组织你的数据 8.1 Self Encapsulate Field(自封装值域) 8.2 Replace Data Value with Object(以对象取代数据值) 8.3 Change Value to Reference(将实值对象改为引用对象) 8.4 Change Reference to ...

    重构-改善既有代码的设计(简体中文)

    《重构-改善既有代码的设计》一书,由马丁·福勒撰写,是软件工程领域的一部经典之作。书中深入探讨了重构技术,旨在帮助开发者在不改变代码功能的前提下,优化和改进现有代码的设计与结构,从而提升代码的可读性、...

    重构--改善既有代码的设计

    ### 重构——改善既有代码的设计 #### 知识点概览 《重构——改善既有代码的设计》是一本经典的软件工程书籍,由Martin Fowler撰写。本书深入浅出地讲解了重构的概念、方法及其在软件开发中的应用,对于提高Java...

    重构-改善既有代码的设计_简体中文

    ### 重构——改善既有代码的设计 #### 知识点概览 《重构——改善既有代码的设计》是一本针对软件开发人员提升代码质量的经典著作。本书不仅深入浅出地讲解了重构的基本概念、方法论,还提供了丰富的重构示例,帮助...

    重构-改善既有代码的设计.pdf

    ### 重构——改善既有代码的设计 #### 知识点概览 重构是一种系统化的方法,旨在改进现有软件的内部结构而不改变其外部行为。通过重构,可以提高代码的可读性和可维护性,并减少未来的修改成本。《重构-改善既有...

    重构-改善既有代码的设计(chm清晰版)

    作者:Martin Fowler,Kent Beck,John ...章节八 重新组织数据 章节九 简化条件表达式 章节十 简化函数调用 章节十一 处理概括关系 章节十二 大型重构 章节十三 重构,复用与现实 章节十四 重构工具 章节十五 集成

    重构-改善既有代码的设计(简体中文).pdf

    ### 重构——改善既有代码的设计 #### 书籍简介 本书《重构:改善既有代码的设计》是一本关于如何改进现有软件系统的经典著作。该书由Martin Fowler撰写,原版使用英文,而这里提到的是该书的中文版本,包含了繁体...

Global site tag (gtag.js) - Google Analytics