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() { /* ... */ }
}