Pular para o conteúdo principal

SOLID - Interface Segregation Principle (ISP)

SOLID

Clientes (aka Classes) não devem ser forçados a depender de métodos que não usam.

É melhor ter muitas interfaces específicas do que uma única interface grande.

public interface ICadastro
{
// logica apenas para cadastro de clientes
void SendEmail(string to, string subject, string body);
// logica apenas para cadastro de fornecedores
void SendContract(string to, string subject, string body);
// logica para ambos
void Save(string nome, string email);
}

public class CadastroCliente : ICadastro
{
public void Save(string nome, string email) { }
public void SendEmail(string to, string subject, string body) { }
// sou obrigado a implementar mesmo sem usar
public void SendContract(string to, string subject, string body) { }
}

Como correção, poderíamos usar hierarquia entre interfaces (olha que maneiro).

public interface ICadastro
{
void Save(string nome, string email);
}

public interface ICadastroCliente : ICadastro
{
void SendEmail(string to, string subject, string body);
}

public interface ICadastroFornecedor : ICadastro
{
void SendContract(string to, string subject, string body);
}

public class CadastroCliente : ICadastroCliente
{
public void Save(string nome, string email) { }
public void SendEmail(string to, string subject, string body) { }
}

Referências