Skip to the content.
Skip to the content.

SOLID (4/5)

Um dos conceitos mais solicitados hoje no mundo do desenvolvimento é o conhecimento de SOLID. Nesse post, vamos explorar o ISP - Interface Segregation Principle.

O ISP (Interface Segregation Principle) ou Princípio da Segregação de Interfaces se baseia na ideia de evitar a criação de interfaces grandes, que forçam os clientes implementar métodos que não serão utilizados. O ISP propõe que as interfaces sejam pequenas e específicas, permitindo que os clientes implementem apenas os métodos que realmente necessitam.

Um exemplo prático é o seguinte: Imagine uma interface para um repositório de Logs. Se tivermos uma interface baseda em CRUD, ela poderia ser assim:

public interface ILogRepository
{
	void Create(Log log);
	Log Read(int id);
	void Update(Log log);
	void Delete(int id);
}

Outro caso muito comum é ver interfaces genéricas, sendo mal empregadas e ferindo os princípios de SOLID, principalmente o ISP. Por exemplo, uma interface que define métodos para manipulação de dados, mas que não são relevantes para todos os tipos de dados. Isso pode levar a implementações desnecessárias e complexidade no código.

public interface IDataRepository<T>
{
	void Add(T item);
	T Get(int id);
	void Update(T item);
	void Delete(int id);
}

Nesse caso, a interface IDataRepository<T> é genérica demais e não é aplicavel para todos os casos, como no exemplo do repositório de Logs, isso porque implementar os métodos de Update e Delete não faz sentido para esse repositório.

Então, podemos criar uma interface específica para ele:

public interface ILogRepository
{
	void Create(Log log);
	Log Read(int id);
}

Dessa forma, evitamos que os clientes sejam obrigados a implementar métodos que não são necessários para a construção do registro de Logs.

O ISP nos ensina que “clientes não devem ser forçados a depender de interfaces que não usam”. Ao criar interfaces menores e mais específicas, tornamos nosso código mais flexível, testável e fácil de manter.

No próximo post da série SOLID, abordaremos o DIP (Dependency Inversion Principle)!