ConstructiCat Logo
CodeBust.
Browse section ▾

Eliminar intermediario.

Problem

Una clase tiene demasiados métodos que simplemente delegan en otros objetos.

Solution

Elimina estos métodos y obliga al cliente a llamar directamente a los métodos finales.

##Example

Antes
Client Class Person getManager() Department
Después
Client Class Person +getDepartment() Department +getManager()

##Why Refactor

Para describir esta técnica, usaremos los términos de Ocultar delegado, que son:

  • Servidor es el objeto al que el cliente tiene acceso directo.

  • Delegado es el objeto final que contiene la funcionalidad que el cliente necesita.

Hay dos tipos de problemas:

  1. La clase servidora no hace nada por sí misma y simplemente genera complejidad innecesaria. En este caso, reflexiona sobre si esta clase es realmente necesaria.

  2. Cada vez que se añade una nueva característica al delegado, necesitas crear un método delegante para ella en la clase servidora. Si se realizan muchos cambios, esto resultará bastante tedioso.

##How to Refactor

  1. Crea un getter para acceder al objeto de la clase delegada desde el objeto de la clase servidora.

  2. Sustituye las llamadas a los métodos delegantes de la clase servidora por llamadas directas a los métodos de la clase delegada.