Principios S.O.L.I.D. — 1. Principio de responsabilidad única (SRP — Single Responsible Principle)

Ernesto Crespo
3 min readMay 7, 2022

--

En ingeniería de software existe el principio S.O.L.I.D. Los principios SOLID son guías que pueden ser aplicadas en el desarrollo de software para eliminar malos diseños provocando que el programador tenga que refactorizar hasta que sea legible y extensible.

Sus principios son:

  • Single responsability principle — Principio de responsabilidad única.
  • Open/closed principle — Principio abierto/cerrado.
  • Liskov substitution principle — Principio de sustitución Liskov.
  • Interface segregation principle — Principio de segregación de la interfaz.
  • Dependency inversion principle — Principio de inversión de la dependencia.

A continuación dejo un vídeo de ArjanCodes que explica con código python los principios S.O.L.I.D:

El principio de responsabilidad única estable que cada módulo o clase debe tener una responsabilidad sobre una sola parte de la funcionalidad proporcionada, y esta responsabilidad debe estar encapsulada en su totalidad por la clase. Todos sus servicios deben estar estrechamente alineados con esa responsabilidad.

Voy a usar el ejemplo de código de Arjan y luego muestro un código de un generador de código QR en python y como cumpliendo el principio S.O.L.I.D. se va mejorando su legilibilidad y extensibilidad.

1. Clase Order que tiene items, quantities, precios y estatus. Con métodos add_item (agregar item), total_price (precio total) y pay (pago).

La salida que se genera es el monto total a pagar y luego la forma de pago:

210

Processing debit payment type

Verifying security code: 0372846

En la clase order se tiene el inconveniente que si se quiere incorporar otra forma de pago, toca modificar dicha clase que es de la orden, que ha dicha clase no debería importarle el método de pago, simplemente debe generar la Orden.

Para mejorar esto, se va a crear una clase llamada PaymentProcessor (procesador de pago), el cual es el que manejará las diferentes formas de pago.

A continuación el código:

Esto devuelve lo mismo que en el código anterior.

210

Processing debit payment type

Verifying security code: 0372846

La ventaja que da esta nueva versión es que si se necesita incorporar un nuevo método de pago, por ejemplo pago con criptomonedas o por paypal, no es necesario tocar la clase Order, si no la clase PaymentProcessor.

2. Generador de código QR.

Se tiene librerías para generar código QR: MyQR, qrcode y amzqr.

Acá el inconveniente es que se tiene un método que depende de la librería que se use se genera el código QR, pero si toca agregar una nueva librería, toca probablemente modificar los argumentos que se reciben y agregar código para la nueva librería en ese método. La solución es crear métodos para cada librería.

Otra opción es crear una clase para cada librería.

En el siguiente artículo se explicará el principio abierto/cerrado.

¡Haz tu donativo! Si te gustó el artículo puedes realizar un donativo con Bitcoin (BTC) usando la billetera digital de tu preferencia a la siguiente dirección: 17MtNybhdkA9GV3UNS6BTwPcuhjXoPrSzV

O Escaneando el código QR desde la billetera:

Originally published at https://www.seraph.to on May 7, 2022.

--

--

Ernesto Crespo

Senior Python Developer, Software Architect, Big Data, Data Science, Machine Learning and Deep Learning, Debian SysAdmin, DevOps, Blogger and Freelancer.