Aprende en casa Ir a KODOTI
Aprende en casa KODOTI

SOLID #4: Interface Segregation Principle con C#

En esta publicación veremos como implementar Interface Segregation Principle usando el lenguaje C#.

Rodríguez Patiño, Eduardo
Rodríguez Patiño, Eduardo
2020-07-03 | 6,761 lecturas
Actualizado:

Muchas interfaces especificas son mejores que una sola interfaz.

Explicación

Un problema muy común es tener una interfaz obsesa, es decir con mucha funcionalidad y el problema radica cuando queremos hacer uso de esta tenemos métodos que no vamos a poder usar.

Ejemplo

Hagamos un ejemplo práctico con una clase repositorio para realizar tareas básicas de CRUD.

public interface IRepository 
{
    void Update();
    void Create();
    void Remove(int id);
    void Get(int id);
    void GetAll();
}
public class UserRepository : IRepository
{
    public void Create()
    {
        // ToDo
    }

    public void Remove(int id) 
    {
        // ToDo
    }

    public void Update()
    {
        // ToDo
    }

    public void Get(int id)
    {
        // ToDo
    }

    public void GetAll()
    {
        // ToDo
    }
}

¿Qué pasaría si? ..

Queremos implementar otro repositorio pero esta limitado a implementar métodos de lectura solo para lectura.

public class ReportRepository : IRepository
{
    public void Create()
    {
        throw new System.NotImplementedException();
    }

    public void Update()
    {
        throw new System.NotImplementedException();
    }

    public void Remove(int id) 
    {
        throw new System.NotImplementedException();
    }

    public void Get(int id)
    {
        // ToDo
    }

    public void GetAll()
    {
        // ToDo
    }
}

La solución

La solución es pensar en pequeñas piezas para construir componentes más modulares.

public interface IReadable 
{
    void Get(int id);
    void GetAll();

}

public interface IWriteable
{
    void Update();
    void Create();
}

public interface IRemovable
{
    void Remove(int id);
}
public class UserRepository : IReadable, IWriteable, IRemovable
{
    public void Create() { }
    public void Update() { }
    public void Remove(int id) { }
    public void Get(int id) { }
    public void GetAll() { }
}

public class ReportRepository : IReadable
{
    public void Get(int id) { }
    public void GetAll() { }
}

Estudia con nosotros

🚀 Mejora tus oportunidades laborales