Estamos trabajando en algo propio llamado KODOTI. Click para unirte
Se viene KODOTI. Únete

SOLID #1: Single Responsibility Principle (SRP) con C#

En esta publicación veremos como implementar Single Responsibility Principle usando el lenguaje C#.

Rodríguez Patiño, Eduardo
6,888 lecturas
Rodríguez Patiño, Eduardo
Hemos migrado hace poco nuestras publicaciones del blog antiguo. Si crees que esta se encuentra incompleta o sin coherencia deja un comentario para restaurarla manualmente.

Cada módulo de tu software tiene una sola responsabilidad, por lo tanto no debería ser mutli tarea. Ejm: tu business logic, service o como lo quieran llamar.

class UserService
{
    public bool PayMyDebts(string userID)
    {
        var success = false;

        // El usuario necesita saber si tiene dinero en el banco para cubrir su deuda del mes
        if (HasMoneyAtBank(userID))
        {
            // El usuario va a pagar sus deudas para el mes actual
            success = true;
        }

        return success;
    }

    public bool HasMoneyAtBank(string userId)
    {
        return true;
    }
}

¿Se entiende no?, el usuario desea saber si tiene dinero en el banco para realizar el pago de sus deudas.

¿Cuál es el problema?, que hemos combinado 2 responsabilidades y esto va a ser más complejo de mantener/escalar. El verificar si tiene el dinero suficiente en el banco es otra responsabilidad, no le pertenece directamente al usuario porque posiblemente queramos usar esa lógica en otro lugar y vamos a tener que copiar/pegar código.

El código refactorizado sería el siguiente:

class UserService
{
    private readonly BankService _bankService;

    public UserService(BankService bankService)
    {
        _bankService = bankService;
    }

    public bool PayMyDebts(string userID)
    {
        var success = false;

        // El usuario necesita saber si tiene dinero en el banco para cubrir su deuda del mes
        if (_bankService.HasMoneyAtBank(userID))
        {
            // El usuario va a pagar sus deudas para el mes actual
            success = true;
        }

        return success;
    }

}

class BankService
{
    public bool HasMoneyAtBank(string userId)
    {
        return true;
    }
}

De esta manera podemos hacer mejoras al BankService sin tener que tocar la clase UserService.

¿Te gustó nuestra publicación?
Suscríbete a nuestro boletín