En el cambiante panorama tecnológico del desarrollo de software, escribir código escalable y mantenible es crucial para el éxito a largo plazo. Una de las mejores maneras de lograrlo es siguiendo las Principios SOLID, un conjunto de cinco principios de diseño orientado a objetos introducidos por Robert C. Martin (Uncle Bob). Estos principios ayudan a los desarrolladores a crear sistemas de software flexibles, robustos y fácilmente modificables.
El SÓLIDO acrónimo significa:
Al aplicar estos principios, los desarrolladores pueden reducir la complejidad, mejorar la legibilidad y facilitar la depuración y las mejoras futuras.
«Una clase debe tener una sola razón para cambiar».
Cada clase debe ser responsable de una sola parte de la funcionalidad. Esto garantiza que los cambios en un aspecto del sistema no afecten involuntariamente a otros.
En lugar de escribir un User
clase que gestiona la autenticación, las notificaciones por correo electrónico y las operaciones de base de datos, divídala en clases separadas:
clase UserAuthenticator:
inicio de sesión definido (propio, usuario):
pase
clase EmailNotifier:
def send_email (propio, usuario, mensaje):
pase
clase UserRepository:
def save (propio, usuario):
pase
De esta manera, modificar la lógica de autenticación no afecta las notificaciones por correo electrónico ni las operaciones de base de datos.
«Las entidades de software deben estar abiertas para la extensión, pero cerradas para la modificación».
Esto significa que debería poder ampliar la funcionalidad sin alterar el código existente. Esto evita cambios importantes y permite añadir funciones de forma más segura.
En lugar de modificar una clase de procesamiento de pagos para agregar nuevos métodos de pago, usa la herencia o el polimorfismo:
clase PaymentProcessor:
def process_payment (self, importe):
generar NotImplementedError
clase CreditCardPayment (PaymentProcessor):
def process_payment (self, importe):
print ("Procesamiento del pago con tarjeta de crédito")
clase PayPalPayment (PaymentProcessor):
def process_payment (self, importe):
print ("Procesando el pago de PayPal")
Se pueden agregar nuevos métodos de pago sin modificar el código existente.
«Los subtipos deben poder sustituirse por sus tipos base».
Una subclase debería poder reemplazar a su clase principal sin interrumpir la funcionalidad.
Imagina un Pájaro
clase que tiene un mosca ()
método. Si introducimos un Pingüino
subclase que no puede volar, rompería las expectativas. Un mejor enfoque es separar el comportamiento de vuelo:
clase Bird:
def make_sound (self):
pase
clase FlyingBird (Bird):
vuelo seguro (self):
pase
clase Penguin (Bird):
natación sin definición (self):
pase
Ahora, los pingüinos no heredan comportamientos innecesarios.
«No se debe obligar a los clientes a depender de interfaces que no utilizan».
En lugar de crear interfaces grandes y monolíticas, divídalas en otras más pequeñas y específicas.
UN interfaz que hace cumplir work ()
y eat ()
los métodos son problemáticos para los robots, que no comen.
clase Workable:
def work(self):
pass
clase Eatable:
def eat(self):
pase
clase Humano (utilizable, comestible):
trabajo en def (self):
print ("En funcionamiento")
def (auto):
print ("Comiendo")
class Robot(Workable):
def work(self):
print («En funcionamiento»)
Ahora, las clases solo implementan métodos relevantes para ellas.
«Los módulos de alto nivel no deberían depender de los módulos de bajo nivel. Ambos deberían depender de abstracciones».
En lugar de acoplar estrechamente las clases a implementaciones específicas, depende de las abstracciones.
En lugar de usar directamente un Base de datos MySQL
clase, usa una interfaz:
c
def save (self, data):
pass
clase MySQLDatabase (Datebase):
def save (self, data):
print ("Guardar en MySQL")
clase UserRepository:
def __init__ (self, db: Datebase):
self.db = db
def save_user (self, user):
self.db.save (user)
Ahora, podemos intercambiar bases de datos (por ejemplo, PostgreSQL, MongoDB) sin modificar Repositorio de usuarios
.
Siguiendo los principios SOLID, puede escribir código más limpio, más fácil de mantener y escalable. Estos principios reducen las dependencias, simplifican la depuración y facilitan mucho la ampliación de las funciones.
Ya sea que esté trabajando en un proyecto pequeño o en un sistema empresarial grande, la adhesión a SOLID hará que el desarrollo de su base de código sea más fluido y esté preparado para el futuro.
¡Empieza a aplicar SOLID hoy mismo y experimenta la diferencia en la calidad de tu código!