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

SOLID #2: Open/Closed Principle (OSP) con C#

En esta publicación veremos como implementar Open/Closed Principle usando el lenguaje C#.

Rodríguez Patiño, Eduardo
5,166 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.

Una clase u objeto debe estar disponible para su extensión pero no para su modificación. Para este ejemplo vamos a ver los permisos que puede tener un usuario dentro del sistema, uno de ellos es "Puede realizar un pago" basado en el Rol.

class Admin
{
    public int Id { get; set; }
    public string Name { get; set; }
}

class User
{
    public int Id { get; set; }
    public string Name { get; set; }
}

class UserFeatures
{
    public bool UserCanMakeAPayment(User user)
    {
        // Lógica de negocio
        return true;
    }

    public bool AdminCanMakeAPayment(Admin user)
    {
    // Lógica de negocio
        return true;
    }
}

Mañana me solicitan que cree un nuevo rol, por ejemplo "Seller". La solución actual sería crear un método más SellerCanMakeAPayment. Pero el problema radica en que nuestra clase tiene que implementar más codigo.

Por ende, estamos rompiendo el prinpcio al modificar nuestro código. Recuerda, el principio es: abierto para la extensión pero cerrado para la modificación, por lo tanto no modifiques nada, extendie la funcionalidad.

abstract class BaseUser
{
    public int Id { get; set; }
    public string Name { get; set; }
}

class Admin : BaseUser { }

class User : BaseUser { }

class UserFeatures
{
    public bool CanMakeAPayment(BaseUser user)
    {
        // Lógica de negocio
        return true;
    }
}
¿Te gustó nuestra publicación?
Suscríbete a nuestro boletín