> 백엔드 개발 > PHP 튜토리얼 > PHP杂谈《重构-改善既有代码的设计》之对象之间搬移特性_PHP教程

PHP杂谈《重构-改善既有代码的设计》之对象之间搬移特性_PHP教程

WBOY
풀어 주다: 2016-07-13 17:49:43
원래의
792명이 탐색했습니다.

思维导图 

 
PHP杂谈《重构-改善既有代码的设计》之对象之间搬移特性_PHP教程
 
 


介绍
 
 承接上文PHP 杂谈《重构-改善既有代码的设计》之重新组织你的函数,继续说重构方面的内容。
 
 
 专业术语
 
delegate:委托
encapsulate:封装
introduce:引入
 
 前言
 
”决定把责任放在哪里“——运用重构改变原先的设计。
 


 
PHP杂谈《重构-改善既有代码的设计》之对象之间搬移特性_PHP教程


解释:
  1、Class承担过多而臃肿不堪——Extract Class将一部分责任分离出去。
  2、Class不负责任——Inline Class将它融入另一个Class。
  3、Class使用另一个Class——Hide Delegate隐藏关系。
  4、承接(3)Delegate Class经常变化——Remove Middle Man。
 
 Move Method
 
如果一个类中的方法与另一个类有很多的交流,那么我们就在另一个类中建立一个有类似功能的新函数,将旧函数变成一个单纯的Delegating Method, 或是将旧函数移除。
 



PHP杂谈《重构-改善既有代码的设计》之对象之间搬移特性_PHP教程
PHP杂谈《重构-改善既有代码的设计》之对象之间搬移特性_PHP教程
PHP杂谈《重构-改善既有代码的设计》之对象之间搬移特性_PHP教程
 
类图:
PHP杂谈《重构-改善既有代码的设计》之对象之间搬移特性_PHP教程
 
动机:
  1、如果一个类与另一个类有高度耦合,我就会Move Method。——class更简单,更干净利落的实现系统交付的任务。
  2、移动一些值域,就要检查是否使用另一个类的次数必使用所驻对象的次数还多。
 Move Field
 
状况:你的class中的field被另一个class更多的用到。那么在另一个class里建立new field,修改旧的field。 
PHP杂谈《重构-改善既有代码的设计》之对象之间搬移特性_PHP教程
PHP杂谈《重构-改善既有代码的设计》之对象之间搬移特性_PHP教程
PHP杂谈《重构-改善既有代码的设计》之对象之间搬移特性_PHP教程
 


Extract Class
 
状况:一个类做了两个类做的事,那么建立一个新Class,将相关的Field和Method从旧Class移到新Class。
 
 



PHP杂谈《重构-改善既有代码的设计》之对象之间搬移特性_PHP教程
 PHP杂谈《重构-改善既有代码的设计》之对象之间搬移特性_PHP教程
PHP杂谈《重构-改善既有代码的设计》之对象之间搬移特性_PHP教程
 
Inline Class
状况:你的某个Class没有做太多事情(没有承担足够责任),那么将Class的所有特性搬移到另一个Class中,然后移除原Class
动机:Inline ClassExtract Class相反。——把Extract Class例子反过去,因为PhoneNumber只用作读取codenumber
 
 Hide Delegate
 
状况:客户直接调用Server ObjectDelegate ClassMethod,那么在Server端建立客户所需的函数Method,用以隐藏委托关系。
 
 学过对象技术的人都知道,虽然php允许你将field声明为public,但你还应该隐藏fieldprivate)。随着经验日渐丰富,有更多值得封装的东西。
 
看下面一个例子:PHP杂谈《重构-改善既有代码的设计》之对象之间搬移特性_PHP教程
 
 $person->getDepartment()->getManager()明显揭露了,要想找到Xiaocai的领导,必须要经过department,所以我们要做的事隐藏department。——可以减少耦合性。
 
PHP杂谈《重构-改善既有代码的设计》之对象之间搬移特性_PHP教程
PHP杂谈《重构-改善既有代码的设计》之对象之间搬移特性_PHP教程
 
 Remove Middle Man
 
状况:如果某个Class做了过多的Simple Delegate,那么我们就直接调用Delegate Class
动机:在Hide Delegate中的例子里当Department有更多新方法的时候,我们为了Hide Delegate,就要必须在Person里添加相应的方法做Delegate之用。这时候的Person完全变成了一个Middle Man,此时我们就应该直接调用Delegate Class——Department
 重构的意义就在于:你永远不必说对不起,只要你把出问题的地方修补好就行了。
 
 PHP杂谈《重构-改善既有代码的设计》之对象之间搬移特性_PHP教程
 
PHP杂谈《重构-改善既有代码的设计》之对象之间搬移特性_PHP教程
PHP杂谈《重构-改善既有代码的设计》之对象之间搬移特性_PHP教程
 
 


Introduce Foreign Method
 
状况:有一个类Client需要使用的类PreviousEnd中一个额外函数,但你无法修改这个类PreviousEnd,那么你就在Client中建立一个函数,并以一个PreviousEnd实体做为参数。
 


PHP杂谈《重构-改善既有代码的设计》之对象之间搬移特性_PHP教程
PHP杂谈《重构-改善既有代码的设计》之对象之间搬移特性_PHP教程
PHP杂谈《重构-改善既有代码的设计》之对象之间搬移特性_PHP教程
 
 


  总结
 
需要注意一下,“Extract Class”和“Inline Class”,”Hide Delegate“和”Remove Middle Man",都是相反的过程,具体理解,可以看前言中的那张流程图。
 
“Hide Delegate"我们常用于使用少量的”Delegate Method“的时候,而”Remove Middle Man“,用于调用很多”Delegate Method“的时候,我们可以直接使用Delegate Class,进行调用,而有的Delegate Method我们视情况保留一部分。
 
“Extract Class”和“Inline Class”,"Extract Class"经常用于承担那过多责任而变得臃肿不堪的Class中,而“Inline Class”经常用于当前的这个类”太不负责的“时候使用。——我个人是宁愿“Extract Class”,也不愿“Inline Class”。
 
摘自  川山甲

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/478312.htmlTechArticle思维导图 介绍 承接上文PHP 杂谈《重构-改善既有代码的设计》之重新组织你的函数,继续说重构方面的内容。 专业术语 delegate:委托 enca...
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿