Interfaces e Classes abstratas

Fala galera!
É muito comum que ao desenvolvermos uma solução não nos atentemos que estamos nos repetindo, espalhando trechos de código seelhantes em diferentes partes.
Nesta hora vale muito a pena fazermos um refactoring do código e torná-lo não só mais organizado mas também mantenível.
Para isto costumamos nos basear em dois elementos:
Interfaces;
Classes abstratas;
Mas você sabe diferenciar quando devemos usar uma ou outra?
As interfaces são contratos que devem ser seguidos pelas clases que as implementam, ou seja, quando digo que uma classe implementa determinada interface estou dizendo que ela segue um determinado contrato e terá os membros públicos definidos pela interface.
Uma boa prática em nomear interfaces é utilizar adjetivos como ICloneable, IReachable, IComparable etc.
Um problema com as interfaces e que deverá ser solucionado no C# 8.0 é a implementação padrão para membros da interface. Isto permitirá que adicionemos novos membros sem quebrar código legado que se baseia nesta interface e não implementa estes membros.
Já as classes abstratas podem possuir tanto membros abstratos que devem ser implementados nas classes herdadas como também implementações padrão.
Uma boa prática de nomenclatura é utilizar o prefixo ou sufixo Base para estas classes e devemos ter muita atenção nos comportamentos já implementados pois caso precisemos mudá-los podemos introduzir efeitos colaterais nas classes descendentes.
Costumo usar classes abstratas em situações em que quero impor um fluxo de chamadas introduzindo flexibilidade no que stá sendo feito, como adição d log, captura de informações, limpeza de estado entre outros.
Em um próximo post devo comentar melhor isto e como podemos melhorar nosso código aplicando estas técnicas.
Até a amanhã!

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s