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);
}
public
interface
IUser
{
bool
Create(User user);
bool
Update(User user);
List<User> List();
bool
Delete(
int
userId);
}
- Classes
public
class
Product : IProduct
{
public
bool
Create(Product prod)
{
//[funcionalidade]
}
public
bool
Update(Product prod)
{
//[funcionalidade]
}
public
List<Product> List()
{
//[funcionalidade]
}
public
bool
Delete()
{
//[funcionalidade]
}
}
public
class
User : IUser
{
public
bool
Create(User user)
{
//[funcionalidade]
}
public
bool
Update(User user)
{
//[funcionalidade]
}
public
List<User> List()
{
//[funcionalidade]
}
public
bool
Delete(
int
userId)
{
//[funcionalidade]
}
}
- Interface Genérica
public
interface
IGenericCRUD<T>
where
T :
class
{
bool
Create(T entity);
bool
Update(T entity);
List<T> List();
bool
Delete(
int
entityId);
}
Agora basta que você implemente das interfaces comuns esta interface genérica, ficando da seguinte forma:
public
interface
IProduct : IGenericsCRUD<Product>
{
int
GenerateNewId();
//nova assinatura criada
}
public
interface
IUser : IGenericsCRUD<User>
{
bool
IsRepeated(
int
userId);
//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.