ConstructiCat Logo
CodeBust.
Browse section ▾

Remover Intermediário.

Problem

Uma classe tem métodos demais que simplesmente delegam para outros objetos.

Solution

Exclua esses métodos e force o cliente a chamar os métodos finais diretamente.

##Example

Antes
Client Class Person getManager() Department
Depois
Client Class Person +getDepartment() Department +getManager()

##Why Refactor

Para descrever esta técnica, usaremos os termos de Esconder Delegação, que são:

  • Servidor é o objeto ao qual o cliente tem acesso direto.

  • Delegado é o objeto final que contém a funcionalidade necessária ao cliente.

Há dois tipos de problemas:

  1. A classe-servidora não faz nada por si só e simplesmente cria complexidade desnecessária. Nesse caso, reflita se essa classe é realmente necessária.

  2. Toda vez que uma nova funcionalidade é adicionada ao delegado, você precisa criar um método delegador para ela na classe-servidora. Se muitas mudanças forem feitas, isso será bastante cansativo.

##How to Refactor

  1. Crie um getter para acessar o objeto da classe-delegada a partir do objeto da classe-servidora.

  2. Substitua as chamadas aos métodos delegadores na classe-servidora por chamadas diretas aos métodos da classe-delegada.