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

digraph foo {
    "User1" -> "OPS\n+op1 +op2 +op3";
    "User2" -> "OPS\n+op1 +op2 +op3";
    "User3" -> "OPS\n+op1 +op2 +op3";
}
  • 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

digraph foo {
    "Presentation" -> "Business Logic";
    "Business Logic" -> "Data";
} digraph foo {
   "VS";
} digraph foo {
    "Presentation" -> "Business Logic";
    "Data" -> "Business Logic";
}

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.

../_images/bounded-context.png