ConstructiCat Logo
CodeBust.
Browse section ▾

Reemplazar delegación con herencia.

Problem

Una clase contiene muchos métodos sencillos que delegan en todos los métodos de otra clase.

Solution

Haz que la clase sea heredera del delegado, lo que vuelve innecesarios los métodos delegantes.

##Example

Before
Employee persongetName() Person getName() return $this->person->getName(); 1
After
Person getName() Employee

##Why Refactor

La delegación es un enfoque más flexible que la herencia, ya que permite cambiar cómo se implementa la delegación y colocar también otras clases ahí. No obstante, la delegación deja de ser beneficiosa si delegas acciones en una sola clase y en todos sus métodos públicos.

En tal caso, si reemplazas la delegación por herencia, limpias la clase de un gran número de métodos de delegación y te ahorras la necesidad de crearlos para cada nuevo método de la clase delegada.

##Benefits

  • Reduce la longitud del código. Todos esos métodos de delegación dejan de ser necesarios.

##How to Refactor

  1. Haz que la clase sea una subclase de la clase delegada.

  2. Coloca el objeto actual en un campo que contenga una referencia al objeto delegado.

  3. Elimina uno a uno los métodos con delegación simple. Si sus nombres eran diferentes, usa Renombrar método para dar a todos los métodos un único nombre.

  4. Sustituye todas las referencias al campo delegado por referencias al objeto actual.

  5. Elimina el campo delegado.