Simplifique seu codigo com uso de Interfaces Genéricas no C# !

Marcio Nizzola
2 min readJun 22, 2021

Para começar, é preciso saber o que são os tipos genéricos em C#, no post anterior (link), demonstrei a implementação de tipos genéricos em classes.

Então para melhorar nossas práticas e dar mais qualidade em nosso código, utilizamos muitas vezes as Interfaces, que nada mais são do que um “contrato” estabelecendo regras para quem à implementa, onde as classes deverão possuir todos os métodos contidos nas interfaces.

Mas muitas vezes, nós temos que criar um padrão para nosso projeto, onde várias classes devem herdar um modelo (exemplo: classes de serviços e repositórios), e para evitar que tenhamos que criar múltiplas interfaces para atender ao mesmo propósito, surgem aqui as Interfaces com tipos genéricos.

Então vamos aos códigos para exemplificar o uso, iremos criar uma interface para nossas classes de um repositório, onde teremos as funções básicas para um CRUD.

Inicialmente a aplicação havia sido feita para ter métodos na interface “IContaRepository” para funções que serão padrões para qualquer repositório, assim caso eu criasse uma nova classe, teria que colocar os métodos “GetAll, GetOne, Update, Insert, Delete” gerando assim um trabalho maior e repetitivo, como feito no exemplo abaixo:

Então, para facilitar a vida e criar um padrão, vamos gerar uma interface genérica !

Observem, que utilizamos o tipo “T” na declaração da Interface, fazendo com que ela espere um tipo genérico de classe.

Observe que é feita a especificação “where T: class” indicando que T deve ser uma classe.

E a partir daí, toda interface nova de um repositório, deverá herdar a interface “IBaseRepository” e assim extender a interface com os métodos da interface genérica.

Vejam abaixo como ficou a classe inicial:

Destaca-se a herança da interface “IbaseRepository” com a especificação do objeto “ContaModel” fazendo assim que os métodos herdados sejam baseados neste modelo.

Pronto ! Daqui pra frente, é só criar novas interfaces e assim herdando esta base teremos um padrão em todas as nossas classes do repositório, mantendo-as muito mais simples e escrevendo menos código !

--

--

Marcio Nizzola

Microsoft MVP | Software Architect na CI&T | Prof. da Etec Itu | Membro Fundador da Comunidade Itu Developers.