Saltar al contenido principal

Interface Segregation Principle (ISP)

Definición: Los clientes no deben verse forzados a depender de interfaces que no utilizan. Code Smell Relacionado:

  • Interfaces Infladas
  • Implementaciones Vacías o con Excepciones
  • Métodos No Utilizados

Técnicas de Refactorización:

  • Extract Interface: Dividir interfaces grandes en más pequeñas y específicas
  • Introduce Null Object: Sustituir verificaciones de null por objetos nulos
public interface IWorker
{
void Work();
void Eat();
void Sleep();
}

public class Human : IWorker
{
public void Work() { /* ... */ }
public void Eat() { /* ... */ }
public void Sleep() { /* ... */ }
}

public class Robot : IWorker
{
public void Work() { /* ... */ }
public void Eat() { throw new NotImplementedException(); } // No tiene sentido
public void Sleep() { throw new NotImplementedException(); } // No tiene sentido
}
public interface IWorkable
{
void Work();
}

public interface IFeedable
{
void Eat();
}

public interface ISleepable
{
void Sleep();
}

public class Human : IWorkable, IFeedable, ISleepable
{
public void Work() { /* ... */ }
public void Eat() { /* ... */ }
public void Sleep() { /* ... */ }
}

public class Robot : IWorkable
{
public void Work() { /* ... */ }
}