De forma bem simples e prática mostrarei como criar Interfaces genéricas com C#.
Como muito de nós sabemos, usar interfaces em nossos sistemas nos trás mais controle quando se trata das funcionalidades essenciais que devem ser desenvolvidas, sua ideia traz o mesmo sentido de um “contrato”. Uma classe que implementa uma Interface deve conter todas as assinaturas de métodos que a interface possui.
Deste modo, é comum termos várias interfaces em nossos projetos com várias assinaturas diferentes. Não utilizando interfaces genéricas, pode ser comum estruturas como esta abaixo:
- Interfaces
public interface IProduct{ bool Create(Product prod); bool Update(Product prod); List<Product> List(); bool Delete(int productId);}publicinterfaceIUser{ boolCreate(User user); boolUpdate(User user); List<User> List(); boolDelete(intuserId);}- Classes
publicclassProduct : IProduct{ publicboolCreate(Product prod) { //[funcionalidade] } publicboolUpdate(Product prod) { //[funcionalidade] }publicList<Product> List() { //[funcionalidade] } publicboolDelete() { //[funcionalidade] }}publicclassUser : IUser{ publicboolCreate(User user) { //[funcionalidade] } publicboolUpdate(User user) { //[funcionalidade] } publicList<User> List() { //[funcionalidade] } publicboolDelete(intuserId) { //[funcionalidade] }}- Interface Genérica
publicinterfaceIGenericCRUD<T> whereT : class{ boolCreate(T entity); boolUpdate(T entity);List<T> List(); boolDelete(intentityId);}Agora basta que você implemente das interfaces comuns esta interface genérica, ficando da seguinte forma:
publicinterfaceIProduct : IGenericsCRUD<Product>{ intGenerateNewId(); //nova assinatura criada}publicinterfaceIUser : IGenericsCRUD<User>{ boolIsRepeated(intuserId); //nova assinatura criada}Você deve ter percebido o quão enxuto ficou agora o código, não é?
Criamos novas assinaturas de métodos para as interfaces IProduct e IUser, apenas para simular novas características nestas classes, mas ambas estão reutilizado todas as assinaturas da IGenericsCRUD, com código mais coeso o tornando mais fácil para manutenção.