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

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

Jul 13, 2016 pm 05:49 PM
php 介绍 对象 思维 特性

思维导图 

 
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...
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

CakePHP-Projektkonfiguration CakePHP-Projektkonfiguration Sep 10, 2024 pm 05:25 PM

In diesem Kapitel werden wir die Umgebungsvariablen, die allgemeine Konfiguration, die Datenbankkonfiguration und die E-Mail-Konfiguration in CakePHP verstehen.

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

CakePHP Datum und Uhrzeit CakePHP Datum und Uhrzeit Sep 10, 2024 pm 05:27 PM

Um in cakephp4 mit Datum und Uhrzeit zu arbeiten, verwenden wir die verfügbare FrozenTime-Klasse.

CakePHP arbeitet mit Datenbank CakePHP arbeitet mit Datenbank Sep 10, 2024 pm 05:25 PM

Das Arbeiten mit der Datenbank in CakePHP ist sehr einfach. In diesem Kapitel werden wir die CRUD-Operationen (Erstellen, Lesen, Aktualisieren, Löschen) verstehen.

CakePHP-Datei hochladen CakePHP-Datei hochladen Sep 10, 2024 pm 05:27 PM

Um am Datei-Upload zu arbeiten, verwenden wir den Formular-Helfer. Hier ist ein Beispiel für den Datei-Upload.

CakePHP-Routing CakePHP-Routing Sep 10, 2024 pm 05:25 PM

In diesem Kapitel lernen wir die folgenden Themen im Zusammenhang mit dem Routing kennen.

Besprechen Sie CakePHP Besprechen Sie CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP ist ein Open-Source-Framework für PHP. Es soll die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich vereinfachen. CakePHP basiert auf einer MVC-ähnlichen Architektur, die sowohl leistungsstark als auch leicht zu verstehen ist. Modelle, Ansichten und Controller gu

CakePHP erstellt Validatoren CakePHP erstellt Validatoren Sep 10, 2024 pm 05:26 PM

Der Validator kann durch Hinzufügen der folgenden zwei Zeilen im Controller erstellt werden.

See all articles