SOLID:
Serie de Normas que busca que el código sea mantenible, que sea fácil de cambiar y muy extensible (agregar funciones), en resumen con un código legible y fácil de entender:
Single Responsibility → Simple and just one thing → Cada clase solo debe tener una y única responsabilidad Open Closed → Abierta para su extensión, pero cerrada para su modificación, agregar funciones es agregar código, no modificar el actual. → Herencia y Polimorfismo → Interfaces & Abstract Clases (Python ABC) Python reference link → Liskov Substitution → Toda clase hija debe poder utilizarse como si fuera la padre → Uso de Interfaces (Herencia de una abstracción en Python) independientes para customizar clases hijas → herencia vs diseño por componentes Interface Segregation → Clases pequeñas en lugar de una clase enorme Dependency Inversion → Los modulos de alto nivel, no deberian de depender de los de bajo nivel, ambos depender de interfaces, se basa en la abstracción, los modulos deben de depender de capas abstractas, reducir el desacople entre sistemas de software → ej. cambiar de mongoDB a SQL deberia ser transparente
Hacer una sola cosa y hacer la bien Descomponerla en partes pequeñas y dedicadas a una sola parte del sistema Cambios de manera transparente Implementar Interfaces para así usar solamente lo que se necesita La comunicación entre componentes del sistema es siempre entre interfaces El agregar las capas de software necesarias para mantener la modularidad Continuación del Principio SOLID Evitar las navajas suizas Si vas a hacer un cambio tiene que se fácil y sencillo, no pasar por toda la implementación Interacción entre el padre y el hijo no debe de tener resultados inesperados Separar elementos por cada cliente (Business oriented) en lugar de tenerlos compartidos Evitar trabajar con abstracciones, principio de la caja negra