Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Quando utilizar os métodos de extensão?

Li a respeito do conceito opened/closed, e que os métodos de extensão estão relacionados a ele. A ideia é que ao desenvolver uma aplicação você define o escopo e a estrutura dela, e para implementações futuras você utilize métodos de extensão para que não ocorram grandes mudanças na classe de origem, afetando assim a manutenibilidade do código?

Outra coisa, que problemas posso ter em meu projeto implementando novos métodos/funcionalidades na classe de origem, sem criar uma classe de extensão?

Agradeço desde já.

1 resposta
solução!

Oi Felipe, tudo bem?

Boa pergunta! Os métodos de extensão (do jeito que foi explicado no curso) são usados quando você não tem acesso à classe original, ou quando você não pode modificar a class original. Eles servem para

classeForaDoMeuAlcance.MeuMetodoDeExtensao(arg1, arg2, ...);

O que você mencionou sobre o princípio open/closed ("aberto para extensão/fechado para modificação) não se aplica somente a quando você não tem acesso à classe original, mas também quando você tem acesso.

Para aplicar o open/closed, podemos usar herança, interface e composição em vez de métodos de extensão, por exemplo.

Ao implementar o open/closed, diminuímos a chance de introduzir bugs no projeto. Por exemplo, se tivermos uma classe já testada e funcionando em produção, é melhor estender do que alterar, pois assim temos um impacto menor no resto do sistema. Assim, criamos outra classe para estender o comportamento da classe original, evitando modificação de funcionalidade existente. Além disso, só precisamos testar e implantar novas funcionalidades. O código original da classe se mantém intacto.

Você pode ler mais sobre esses assuntos neste post do Maurício Aniche no blog da Caelum: Princípios do Código Sólido na orientação a objetos

Um abraço!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software