Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Gabriel Jacinto

Avaliação de classe

Recommended Posts

Acoplamento.

 

Explicando:

O que aconteceria no seu exemplo se você quisesse estender a classe Security por alguma razão e quisesse utilizá-la aqui:

public function __construct( $file ){
       $this->security = new Security();

 

Ah, eu vou lá e altero meu código, pô!

public function __construct( $file ){
       $this->security = new ExtendedSecurity();

 

Agora imagina que existem diversas classes na sua aplicação que poderiam se aproveitar dessa nova extensão de Security, você teria que alterar uma a uma.

O risco é grande de você acabar esquecendo uma que é bem pouco utilizada e em algum momento, aquilo vai dar pau, não vai se comportar do jeito que você queria - e pior - não vai haver nenhum indicativo de onde está o problema.

 

Além disso, suponha que você vá distribuir esse código, ou que ele seja utilizado por uma equipe. Quando você fizer a mudança, vai ter que obrigar todos a atualizarem suas versões do código para a sua. Isso nem sempre é possível, e está sujeito a problemas de compatibilidade.

 

Fazendo assim:

public function __construct($file, Security $security) {
   $this->security = $security;
   // ...
}

// ....
class ExtendedSecurity extends Security {
}

 

Agora você pode utilizar as duas versões. Se quiser se manter com o comportamento antigo, basta fazer:

$upload = new Upload('foo', new Security());

Se quiser a nova funcionalidade:

$upload = new Upload('foo', new ExtendedSecurity());

 

E voìlá, você não precisa alterar código de classe nenhuma, apenas o de utilização. Você não dá informações desnecessárias a um objeto, pois isso gera acoplamento.

Tudo o que o objeto Upload precisa saber é que ele utiliza um objeto do tipo Security, mas não se importa qual é. Então não cabe a ele ter responsabilidade de instanciar um objeto Security, ele só quer usá-lo.

 

Apronte-se, Security, que eu quero lhe usar!

 

Isso é errado (em TODOS os sentidos):

Apronte-se, Security, que eu vou te pegar pra criar e depois lhe usar!

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.