Fundamentos¶
Podría decirse que Clean Architecture no inventa nada nuevo, sino que agrupa metodologías, principios y patrones de diseño conocidos en la industria del software desde hace décadas. Sin embargo, lo que Clean Architecture sí trae a la mesa es su objetivo: crear aplicaciones flexibles que sean fáciles de mantener en el tiempo.
SOLID¶
S-ingle Responsability Principle
Un módulo debería tener una, y sólo una, razón para cambiar
Un módulo debería ser responsabilidad de un sólo actor
O-pen/Closed Principle
Un artefacto de software debería estar abierto para su extensión pero cerrado para su modificación
L-iskov Substitution Principle
Lo que se quiere aquí es algo como la siguiente propiedad de substitución: Si para cada objeto *o1 de tipo S hay un objeto o2 de tipo T, tal que para todos los programas P definidos en términos de T, el comportamiento de P no se modifica cuando o1 es substituido por o2 entonces S es un subtipo de T.
Barbara Liskov, 1988
I-nterface Segregation Principle
Es perjudicial depender de módulos que contienen más de lo que se necesita
Varias interfaces específicas por cliente son mejores que una sóla interfaz de propósito general
D-ependency Inversion Principle
Los sistemas más flexibles son aquellos en los que las dependencias de código se refieren a abstracciones y no a concreciones
Tipos de Programación¶
Programación Estructurada
Impone disciplina en la transferencia directa de control
Resuelve el problema de los ‘GOTO’ mediante la iteración y selección
Programación Orientada a Objetos
Impone disciplina en la la transferencia indirecta de control
Resuelve el problema de los punteros a funciones mediante clases y objetos
Programación Funcional
Impone disciplina en la asignación
Resuelve problemas de condiciones de carrera mediante la inmutabilidad
Modelado del Dominio¶
El núcleo de una aplicación es el dominio que tiene como propósito modelar. Este dominio se representa a través de lo que llamamos, la lógica de negocio.