SlideShare una empresa de Scribd logo
1 de 40
Introducción a DDD
Mariano Sánchez
¿Qué es Domain-Driven Design?
• Libro DDD, de Eric Evans.
• Premisas del Libro:
– El foco principal de un proyecto de software debe estar
ubicado en el Dominio y la Lógica del Dominio.
– Tanto el Dominio como la Lógica del Dominio deben estar
aislados de todo tema de implementación y tecnológico.
– Diseños de Dominios complejos deben basarse en un
Modelo.
Dominio
• Dominio es el conjunto de factores que intervienen en la
solución del problema para el cual fue originado el software.
• Necesitamos entender el Dominio a nivel de detalle.
Modelo de Dominio
• El Modelo es una forma simplificada (selectivamente) y
estructurada del Dominio.
• El Modelo NO es un diagrama, el Modelo es una idea.
• El Modelo NO es Software (Está libre de temas
tecnológicos).
• El Modelo y la Implementación DEBEN estar relacionados.
• El Modelo es conocimiento filtrado.
Modelo de Dominio
• Según Eric Evans, “El Modelo de Dominio es el Corazón del
Software”.
• Construir un Modelo de Dominio adecuado debe ser el foco
principal del proyecto de software.
Modelo de Dominio
• El modelo debe capturar tanto los sustantivos como los
verbos importantes del dominio.
• Debe incluir: comportamiento, actividades del negocio y
reglas del negocio.
• El Modelo debe ser conocido por todo el Equipo (Lenguaje
Ubicuo).
• ¿Dónde esta el conocimiento?: Expertos del Dominio.
Lenguaje Ubicuo
• Los Expertos del Dominio tienen su lenguaje.
• Los Expertos en Software tienen otro lenguaje.
• Debe haber un lenguaje común para evitar traducir de uno a
otro y reducir errores de comprensión.
• Todas las personas involucradas en el proyecto de software
deben hablar este lenguaje.
• Es la base del Exito de DDD.
Lenguaje Ubicuo
Espacio de la Solución Espacio del Problema
Términos Técnicos
Patrones de Diseño
Aspectos Técnicos
Conceptos del Dominio
Subdominios
El sistema a grandes
razgos
Términos del Dominio
que todos usan pero que no
aparecen en el diseño
Términos del Negocio
Desconocidos por los
programadores
Expertos del DominioExpertos en Software
Diagramas
• Los Diagramas son buenos para entender el Modelo, pero no
pueden capturar toda la información.
• Los Diagramas no pueden capturar el comportamiento.
• El Modelo debe estar capturado en el Código.
Implementando: Relación Modelo-Código
• “Relacionando íntimamente el código con el modelo
subyacente, da al código significado y hace al modelo
relevante”.
• El Modelo debe poder leerse desde el código.
• Implementación usando OOP y patrones DDD.
• Aislar las conceptos de Dominio de los conceptos
Tecnológicos.
• Aislar el dominio del resto de la aplicación: Arquitectura en
Capas.
Implementando: Arquitectura en Capas
UI
APPLICATION
DOMAIN
INFRASTRUCTURE
Capa Interfaz de Usuario (UI)
• Es la responsable de interactuar con el usuario, interpretar sus
gestos y brindarle información.
• No contiene lógica del Dominio.
• Permite al usuario interactuar con los objetos del dominio.
• Por lo general es una capa delgada.
Capa de Aplicación (Application)
• Es la que contiene todo tema tecnológico accidental al
negocio.
• De existir interfaces con otros sistemas, es la encargada de
realizar la comunicación para entregarle la información al
dominio.
• Coordina el trabajo de la aplicación, no contiene lógica de
negocio, pero maneja los objetos del dominio.
• Es la que conoce el comienzo y el final de una transacción.
• Por lo general es una capa delgada.
Capa de Infraestructura (Infrastructure)
• Es la encargada de manejar la infraestructura del sistema,
componentes externos, base de datos y frameworks.
• No contiene lógica de negocio, muchas veces es la encargada
de persistir los objetos del dominio en un lugar físico
(accidente tecnológico)
• Por lo general contiene una base de datos relacional y alguna
herramienta ORM.
Capa de Dominio (Domain)
• Es el corazón del Software.
• “Los objetos del Dominio, libres de la responsabilidad de
mostrarse, almacenarse y manejar las actividades de la
aplicación. Enfocados en expresar el modelo. Esto permite
capturar el conocimiento esencial del negocio y ponerlo a
trabajar”.
• Esta capa es donde todos los conceptos, comportamientos y
reglas especificadas por el Modelo son implementados.
• Las demás capas no deben contener “lógica del dominio”,
tanto como sea posible.
Ejemplo de Implementación
Expresando el Modelo en Software
• El Modelo debe poder leerse desde el código.
• Conceptos del Modelo:
– Associations: Relaciones entre objetos y conceptos del
Modelo.
– Entities: Objetos con identidad.
– Value Objects: Objetos usados como atributos para
describir otros objetos (no tienen identidad).
– Services: Acciones que modifican objetos y estados en el
dominio a pedido de un cliente.
Associations
• Por cada asociación en el modelo debe haber un mecanismo
en el software con las mismas propiedades.
• Tipos de asociaciones:
– Uno-a-Uno
– Uno-a-Muchos
– Muchos-a-Muchos
• Eliminar todas las relaciones innecesarias.
• Eliminar bi-direccionalidades innecesarias.
Entities
• Algunos de los objetos no se definen principalmente por sus
atributos.
• Representan una identidad que se mantiene a lo largo de la
aplicación.
• Comúnmente la identidad es un atributo del objeto mismo,
una combinación de atributos, o un atributo creado
especialmente para expresar esa identidad.
• Incluir atributos de identidad.
• Incluir solo comportamiento que ayude a mantener su
identidad.
Entities (Ejemplo)
Value Objects
• Algunos de los objetos no se definen principalmente por sus
atributos.
• Estos objetos sirven para describir otros objetos (Entities).
Value Objects (Ejemplo)
Services
• Son los verbos (acciones) del Modelo.
• Agregan comportamiento al Modelo.
• Manejan comportamiento no cohesivo a una Entity.
• Contienen Lógica y Reglas de Dominio.
Services (Características))
• La operación realizada por el Service refiere a un concepto de
domino que no es realizado naturalmente por un Entity o un
Value Object.
• La operación realizada, modifica o usa otro objeto del
dominio.
• La operación no guarda estado.
Services (Ejemplo)
Módulos
• Los módulos son grupos de elementos de dominio.
• Proveen dos vistas del Modelo:
» Vista de detalles del Módulo.
» Vista de relación entre Módulos.
• Compilables por separado.
• Alta Cohesión y Bajo Acoplamiento.
Mejando el Ciclo de Vida de los Objetos
• Cada objeto del dominio tiene un ciclo de vida.
• Retos del manejo del ciclo de vida:
– Mantener la Integridad de los objetos a través del ciclo de
vida.
– Prevenir que el modelo se vea “inundado” por la
complejidad del manejo del ciclo de vida.
• Solución: Patrones para el manejo del ciclo de vida.
Patrones para el Manejo del Ciclo de Vida
• Aggregates: Proveen limites claros en el modelo, lo que
permite reducir la complejidad del manejo.
• Factories: Usados para encapsular la complejidad de la
creación o reconstrucción de objetos complejos (Aggregates).
• Repositories: Usados para encapsular la complejidad de tratar
con objetos complejos persistentes.
2823 November 2016
Aggregates
• Un Aggregate es un grupo de objetos relacionados, tratados
como uno solo.
• Cada Aggregate tiene un objeto Raíz y un límite claramente
definido.
• Otros objetos solo pueden mantener referencias a la Raíz del
Aggregate.
• Cuando se elimina un Aggregate, se debe eliminar todo su
contenido (entre sus limites)
• Si es persistido, solo la Raíz debe ser obtenible por consultas.
Objetos internos obtenidos a través de la raíz (uso de Lazy
Load)
Aggregates (Ejemplo)
Factories
• Los Factories son objetos esenciales en la capa de dominio
para encapsular la complejidad de crear y reconstruir objetos
complejos.
• Un Factory es un objeto que encapsula la lógica, el
conocimiento y los mecanismos necesarios para crear objetos
complejos (Aggregates)
• A pesar de ser incluidos en la Capa de Domino, no pertenecen
al modelo, son un recurso para disminuir la complejidad.
• Distintas implementaciones (GoF): Abstract Factory, Factory
Method, Builder.
Factories
• El proceso de creación debe ser tan atómico como sea posible.
• Los Factories son especiales para crear Aggregates, cuando un
Entity Raíz es creado, todos los objetos internos del Aggregate
deben ser creados e inicializados sus valores.
• A veces los Factories no son necesarios y un simple constructor
puede ser utilizado:
– La construcción no es compleja.
– La creación de un objeto no involucra a otros, quizás todos
los atributos necesarios son pasados como parámetros al
constructor.
– La implementación puede cambiar en tiempo de ejecución
(patrón Strategy).
Repositories
• Los Respositories son objetos de dominio encargados de la
persistencia de los demás objetos.
• Encapsulan la lógica de persistencia y la conversación con la
infraestrucutra.
• Si un objeto debe ser persistido, se envía el mismo al
Repository (no importa el medio) y este se encarga de hablar
con la infraestrucura para persistirlo.
Repositories
• Los Repositories no manejan transacciones (tema
tecnológico), estas son manejadas por la Capa de Aplicación.
• Es común que los Repositories usen Factories para reconstruir
objetos complejos (Aggregates).
• Aíslan al dominio del medio de persistencia.
Repositories
• Los Repositories no manejan transacciones (tema
tecnológico), estas son manejadas por la Capa de Aplicación.
• Es común que los Repositories usen Factories para reconstruir
objetos complejos (Aggregates).
• Aíslan al dominio del medio de persistencia.
Ejemplo de Implementación
OrderFactory
OrderRepository
TotalCreditService
+AddOrderLine(in orderLine)
+IsOKAccordingToSize() : bool
+IsOKAccordingToCreditLimit() : bool
+Accept()
-TotalAmount
-OrderDate
-OrderNumber
-OrderType
-Status
Order
-NumberOfItems
OrderLine
1
*
Reference
Person
1 1
Implementación Infraestrucura
• Herramientas ORM.
• Una posible solución: Hibernate, Nhibernate, Entity
Framework.
» Mapeo de objetos por metadata.
» Implementación de Lazy Load.
Preguntas?
Bibliografía recomendada
3923 November 2016
Introducción a DDD

Más contenido relacionado

La actualidad más candente

DDD - 3 - Domain Driven Design: Event sourcing.pdf
DDD - 3 - Domain Driven Design: Event sourcing.pdfDDD - 3 - Domain Driven Design: Event sourcing.pdf
DDD - 3 - Domain Driven Design: Event sourcing.pdfEleonora Ciceri
 
Patrones de diseño(presentación 7)
Patrones de diseño(presentación 7)Patrones de diseño(presentación 7)
Patrones de diseño(presentación 7)programadorjavablog
 
Domain Driven Design and Hexagonal Architecture
Domain Driven Design and Hexagonal ArchitectureDomain Driven Design and Hexagonal Architecture
Domain Driven Design and Hexagonal ArchitectureCrishantha Nanayakkara
 
Design Pattern - MVC, MVP and MVVM
Design Pattern - MVC, MVP and MVVMDesign Pattern - MVC, MVP and MVVM
Design Pattern - MVC, MVP and MVVMMudasir Qazi
 
Software architecture
Software architectureSoftware architecture
Software architecturenazn
 
Cuestionario de Active Directory
Cuestionario de Active DirectoryCuestionario de Active Directory
Cuestionario de Active Directorycesartg65
 
Introducing Clean Architecture
Introducing Clean ArchitectureIntroducing Clean Architecture
Introducing Clean ArchitectureRoc Boronat
 
Use case Diagram
Use case Diagram Use case Diagram
Use case Diagram Rahul Pola
 
Software architecture patterns
Software architecture patternsSoftware architecture patterns
Software architecture patternsMd. Sadhan Sarker
 
DDD - 1 - A gentle introduction to Domain Driven Design.pdf
DDD - 1 - A gentle introduction to Domain Driven Design.pdfDDD - 1 - A gentle introduction to Domain Driven Design.pdf
DDD - 1 - A gentle introduction to Domain Driven Design.pdfEleonora Ciceri
 
Clean architecture
Clean architectureClean architecture
Clean architecture.NET Crowd
 
Vistas Arquitectonicas Ingenieria de Software
Vistas Arquitectonicas Ingenieria de SoftwareVistas Arquitectonicas Ingenieria de Software
Vistas Arquitectonicas Ingenieria de SoftwareRoberth Loaiza
 

La actualidad más candente (20)

Uml a java
Uml a javaUml a java
Uml a java
 
DIAGRAMAS DE CLASE
DIAGRAMAS DE CLASEDIAGRAMAS DE CLASE
DIAGRAMAS DE CLASE
 
DDD - 3 - Domain Driven Design: Event sourcing.pdf
DDD - 3 - Domain Driven Design: Event sourcing.pdfDDD - 3 - Domain Driven Design: Event sourcing.pdf
DDD - 3 - Domain Driven Design: Event sourcing.pdf
 
Patrones de diseño(presentación 7)
Patrones de diseño(presentación 7)Patrones de diseño(presentación 7)
Patrones de diseño(presentación 7)
 
Domain Driven Design and Hexagonal Architecture
Domain Driven Design and Hexagonal ArchitectureDomain Driven Design and Hexagonal Architecture
Domain Driven Design and Hexagonal Architecture
 
Design Pattern - MVC, MVP and MVVM
Design Pattern - MVC, MVP and MVVMDesign Pattern - MVC, MVP and MVVM
Design Pattern - MVC, MVP and MVVM
 
Bases de Datos No Relacionales (NoSQL)
Bases de Datos No Relacionales (NoSQL) Bases de Datos No Relacionales (NoSQL)
Bases de Datos No Relacionales (NoSQL)
 
Software architecture
Software architectureSoftware architecture
Software architecture
 
Domain driven desing
Domain driven desingDomain driven desing
Domain driven desing
 
Neo4j - A Graph Database
Neo4j - A Graph DatabaseNeo4j - A Graph Database
Neo4j - A Graph Database
 
Software Architecture
Software ArchitectureSoftware Architecture
Software Architecture
 
Cuestionario de Active Directory
Cuestionario de Active DirectoryCuestionario de Active Directory
Cuestionario de Active Directory
 
Introducing Clean Architecture
Introducing Clean ArchitectureIntroducing Clean Architecture
Introducing Clean Architecture
 
Use case Diagram
Use case Diagram Use case Diagram
Use case Diagram
 
Diagrama de Componentes
Diagrama de ComponentesDiagrama de Componentes
Diagrama de Componentes
 
Software architecture patterns
Software architecture patternsSoftware architecture patterns
Software architecture patterns
 
DDD - 1 - A gentle introduction to Domain Driven Design.pdf
DDD - 1 - A gentle introduction to Domain Driven Design.pdfDDD - 1 - A gentle introduction to Domain Driven Design.pdf
DDD - 1 - A gentle introduction to Domain Driven Design.pdf
 
Clean architecture
Clean architectureClean architecture
Clean architecture
 
Vistas Arquitectonicas Ingenieria de Software
Vistas Arquitectonicas Ingenieria de SoftwareVistas Arquitectonicas Ingenieria de Software
Vistas Arquitectonicas Ingenieria de Software
 
Context API in React
Context API in ReactContext API in React
Context API in React
 

Destacado (13)

¡El Mentacato!
¡El Mentacato!¡El Mentacato!
¡El Mentacato!
 
Ampro Linecard
Ampro LinecardAmpro Linecard
Ampro Linecard
 
Hobby Islak havlular
Hobby Islak havlularHobby Islak havlular
Hobby Islak havlular
 
Services
ServicesServices
Services
 
Jean talon
Jean talonJean talon
Jean talon
 
MC Resource Guide 1-2017
MC Resource Guide 1-2017MC Resource Guide 1-2017
MC Resource Guide 1-2017
 
Mundial Sub 20
Mundial Sub 20Mundial Sub 20
Mundial Sub 20
 
E Catlogue UDAY CERAMICS - INDIA
E Catlogue UDAY CERAMICS - INDIAE Catlogue UDAY CERAMICS - INDIA
E Catlogue UDAY CERAMICS - INDIA
 
C# 6 - Que hay de nuevo?
C# 6 - Que hay de nuevo?C# 6 - Que hay de nuevo?
C# 6 - Que hay de nuevo?
 
CV
CVCV
CV
 
El Santurron
El SanturronEl Santurron
El Santurron
 
Ijetr021228
Ijetr021228Ijetr021228
Ijetr021228
 
Sistema nervioso central
Sistema nervioso central Sistema nervioso central
Sistema nervioso central
 

Similar a Introducción a DDD

Patrones de diseño II
Patrones de diseño IIPatrones de diseño II
Patrones de diseño IIkaolong
 
Arquitectura aplicaciones Patrones de diseño
Arquitectura aplicaciones Patrones de diseñoArquitectura aplicaciones Patrones de diseño
Arquitectura aplicaciones Patrones de diseñoGermania Rodriguez
 
02 -introduccion_a_la_tecnologia_orientada_a_objetos
02  -introduccion_a_la_tecnologia_orientada_a_objetos02  -introduccion_a_la_tecnologia_orientada_a_objetos
02 -introduccion_a_la_tecnologia_orientada_a_objetoskarlalopezbello
 
Modelo Orientado A Objetos
Modelo Orientado A ObjetosModelo Orientado A Objetos
Modelo Orientado A Objetosjose_rob
 
Conceptos de diseño de software
Conceptos de diseño de softwareConceptos de diseño de software
Conceptos de diseño de softwareJose Diaz Silva
 
Mi lenguaje de programación de preferencia
Mi lenguaje de programación de preferenciaMi lenguaje de programación de preferencia
Mi lenguaje de programación de preferenciaglfloresgilberto
 
CC51A_Clase13-14_Patrones_Arquitectonicos.ppt
CC51A_Clase13-14_Patrones_Arquitectonicos.pptCC51A_Clase13-14_Patrones_Arquitectonicos.ppt
CC51A_Clase13-14_Patrones_Arquitectonicos.pptBayronHernandez12
 
Patrones de diseño
Patrones de diseñoPatrones de diseño
Patrones de diseñoaleja0940
 
Construcción de Software (Patrones)
Construcción de Software (Patrones)Construcción de Software (Patrones)
Construcción de Software (Patrones)sandyx17
 
No más "programación copy&paste". Generación automática de código con MOSKitt
No más "programación copy&paste". Generación automática de código con MOSKittNo más "programación copy&paste". Generación automática de código con MOSKitt
No más "programación copy&paste". Generación automática de código con MOSKittJavier Muñoz
 
Principios de diseño de código orientado a objetos SOLID
Principios de diseño de código orientado a objetos SOLIDPrincipios de diseño de código orientado a objetos SOLID
Principios de diseño de código orientado a objetos SOLIDLuis Alexander Aldazabal Gil
 
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...Socialmetrix
 

Similar a Introducción a DDD (20)

Patrones de diseño II
Patrones de diseño IIPatrones de diseño II
Patrones de diseño II
 
patronesdiseño2009.ppt
patronesdiseño2009.pptpatronesdiseño2009.ppt
patronesdiseño2009.ppt
 
Domain driven design
Domain driven designDomain driven design
Domain driven design
 
Arquitectura aplicaciones Patrones de diseño
Arquitectura aplicaciones Patrones de diseñoArquitectura aplicaciones Patrones de diseño
Arquitectura aplicaciones Patrones de diseño
 
02 -introduccion_a_la_tecnologia_orientada_a_objetos
02  -introduccion_a_la_tecnologia_orientada_a_objetos02  -introduccion_a_la_tecnologia_orientada_a_objetos
02 -introduccion_a_la_tecnologia_orientada_a_objetos
 
Modelo Orientado A Objetos
Modelo Orientado A ObjetosModelo Orientado A Objetos
Modelo Orientado A Objetos
 
Conceptos de diseño de software
Conceptos de diseño de softwareConceptos de diseño de software
Conceptos de diseño de software
 
Mi lenguaje de programación de preferencia
Mi lenguaje de programación de preferenciaMi lenguaje de programación de preferencia
Mi lenguaje de programación de preferencia
 
U5.pptx
U5.pptxU5.pptx
U5.pptx
 
SGCE 2014 micro services
SGCE 2014 micro servicesSGCE 2014 micro services
SGCE 2014 micro services
 
CC51A_Clase13-14_Patrones_Arquitectonicos.ppt
CC51A_Clase13-14_Patrones_Arquitectonicos.pptCC51A_Clase13-14_Patrones_Arquitectonicos.ppt
CC51A_Clase13-14_Patrones_Arquitectonicos.ppt
 
Patrones de diseño
Patrones de diseñoPatrones de diseño
Patrones de diseño
 
Construcción de Software (Patrones)
Construcción de Software (Patrones)Construcción de Software (Patrones)
Construcción de Software (Patrones)
 
01. Fundamentos.pdf
01. Fundamentos.pdf01. Fundamentos.pdf
01. Fundamentos.pdf
 
Fundamentos de programacion
Fundamentos de programacionFundamentos de programacion
Fundamentos de programacion
 
No más "programación copy&paste". Generación automática de código con MOSKitt
No más "programación copy&paste". Generación automática de código con MOSKittNo más "programación copy&paste". Generación automática de código con MOSKitt
No más "programación copy&paste". Generación automática de código con MOSKitt
 
6070_TRECALDE_00288.ppt
6070_TRECALDE_00288.ppt6070_TRECALDE_00288.ppt
6070_TRECALDE_00288.ppt
 
Principios de diseño de código orientado a objetos SOLID
Principios de diseño de código orientado a objetos SOLIDPrincipios de diseño de código orientado a objetos SOLID
Principios de diseño de código orientado a objetos SOLID
 
chuy
chuy chuy
chuy
 
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...
 

Más de Mariano Sánchez

Más de Mariano Sánchez (17)

.NET Core
.NET Core.NET Core
.NET Core
 
ASP.NET Core 1.0
ASP.NET Core 1.0ASP.NET Core 1.0
ASP.NET Core 1.0
 
Introducción a SignalR
Introducción a SignalRIntroducción a SignalR
Introducción a SignalR
 
Visual Studio LightSwitch
Visual Studio LightSwitchVisual Studio LightSwitch
Visual Studio LightSwitch
 
HTML5 + Asp.NET
HTML5 + Asp.NETHTML5 + Asp.NET
HTML5 + Asp.NET
 
Hey Cortana!
Hey Cortana!Hey Cortana!
Hey Cortana!
 
Developing Universal Apps for Windows
Developing Universal Apps for WindowsDeveloping Universal Apps for Windows
Developing Universal Apps for Windows
 
Introducing the Windows Phone 8.1 App Development Platform
Introducing the Windows Phone 8.1 App Development PlatformIntroducing the Windows Phone 8.1 App Development Platform
Introducing the Windows Phone 8.1 App Development Platform
 
Visual Studio Online
Visual Studio OnlineVisual Studio Online
Visual Studio Online
 
Patrones Grasp
Patrones GraspPatrones Grasp
Patrones Grasp
 
Patrones de Diseño
Patrones de DiseñoPatrones de Diseño
Patrones de Diseño
 
Conociendo TypeScript
Conociendo TypeScriptConociendo TypeScript
Conociendo TypeScript
 
Universal Windows Platform Programando para todos y todas
Universal Windows PlatformProgramando para todos y todasUniversal Windows PlatformProgramando para todos y todas
Universal Windows Platform Programando para todos y todas
 
Code Smells
Code SmellsCode Smells
Code Smells
 
Introducción a LINQ
Introducción a LINQIntroducción a LINQ
Introducción a LINQ
 
Refactoring - Mejorando el diseño del código existente
Refactoring - Mejorando el diseño del código existenteRefactoring - Mejorando el diseño del código existente
Refactoring - Mejorando el diseño del código existente
 
Patrones de Diseño
Patrones de DiseñoPatrones de Diseño
Patrones de Diseño
 

Introducción a DDD

  • 2. ¿Qué es Domain-Driven Design? • Libro DDD, de Eric Evans. • Premisas del Libro: – El foco principal de un proyecto de software debe estar ubicado en el Dominio y la Lógica del Dominio. – Tanto el Dominio como la Lógica del Dominio deben estar aislados de todo tema de implementación y tecnológico. – Diseños de Dominios complejos deben basarse en un Modelo.
  • 3. Dominio • Dominio es el conjunto de factores que intervienen en la solución del problema para el cual fue originado el software. • Necesitamos entender el Dominio a nivel de detalle.
  • 4. Modelo de Dominio • El Modelo es una forma simplificada (selectivamente) y estructurada del Dominio. • El Modelo NO es un diagrama, el Modelo es una idea. • El Modelo NO es Software (Está libre de temas tecnológicos). • El Modelo y la Implementación DEBEN estar relacionados. • El Modelo es conocimiento filtrado.
  • 5. Modelo de Dominio • Según Eric Evans, “El Modelo de Dominio es el Corazón del Software”. • Construir un Modelo de Dominio adecuado debe ser el foco principal del proyecto de software.
  • 6. Modelo de Dominio • El modelo debe capturar tanto los sustantivos como los verbos importantes del dominio. • Debe incluir: comportamiento, actividades del negocio y reglas del negocio. • El Modelo debe ser conocido por todo el Equipo (Lenguaje Ubicuo). • ¿Dónde esta el conocimiento?: Expertos del Dominio.
  • 7. Lenguaje Ubicuo • Los Expertos del Dominio tienen su lenguaje. • Los Expertos en Software tienen otro lenguaje. • Debe haber un lenguaje común para evitar traducir de uno a otro y reducir errores de comprensión. • Todas las personas involucradas en el proyecto de software deben hablar este lenguaje. • Es la base del Exito de DDD.
  • 8. Lenguaje Ubicuo Espacio de la Solución Espacio del Problema Términos Técnicos Patrones de Diseño Aspectos Técnicos Conceptos del Dominio Subdominios El sistema a grandes razgos Términos del Dominio que todos usan pero que no aparecen en el diseño Términos del Negocio Desconocidos por los programadores Expertos del DominioExpertos en Software
  • 9. Diagramas • Los Diagramas son buenos para entender el Modelo, pero no pueden capturar toda la información. • Los Diagramas no pueden capturar el comportamiento. • El Modelo debe estar capturado en el Código.
  • 10. Implementando: Relación Modelo-Código • “Relacionando íntimamente el código con el modelo subyacente, da al código significado y hace al modelo relevante”. • El Modelo debe poder leerse desde el código. • Implementación usando OOP y patrones DDD. • Aislar las conceptos de Dominio de los conceptos Tecnológicos. • Aislar el dominio del resto de la aplicación: Arquitectura en Capas.
  • 11. Implementando: Arquitectura en Capas UI APPLICATION DOMAIN INFRASTRUCTURE
  • 12. Capa Interfaz de Usuario (UI) • Es la responsable de interactuar con el usuario, interpretar sus gestos y brindarle información. • No contiene lógica del Dominio. • Permite al usuario interactuar con los objetos del dominio. • Por lo general es una capa delgada.
  • 13. Capa de Aplicación (Application) • Es la que contiene todo tema tecnológico accidental al negocio. • De existir interfaces con otros sistemas, es la encargada de realizar la comunicación para entregarle la información al dominio. • Coordina el trabajo de la aplicación, no contiene lógica de negocio, pero maneja los objetos del dominio. • Es la que conoce el comienzo y el final de una transacción. • Por lo general es una capa delgada.
  • 14. Capa de Infraestructura (Infrastructure) • Es la encargada de manejar la infraestructura del sistema, componentes externos, base de datos y frameworks. • No contiene lógica de negocio, muchas veces es la encargada de persistir los objetos del dominio en un lugar físico (accidente tecnológico) • Por lo general contiene una base de datos relacional y alguna herramienta ORM.
  • 15. Capa de Dominio (Domain) • Es el corazón del Software. • “Los objetos del Dominio, libres de la responsabilidad de mostrarse, almacenarse y manejar las actividades de la aplicación. Enfocados en expresar el modelo. Esto permite capturar el conocimiento esencial del negocio y ponerlo a trabajar”. • Esta capa es donde todos los conceptos, comportamientos y reglas especificadas por el Modelo son implementados. • Las demás capas no deben contener “lógica del dominio”, tanto como sea posible.
  • 17. Expresando el Modelo en Software • El Modelo debe poder leerse desde el código. • Conceptos del Modelo: – Associations: Relaciones entre objetos y conceptos del Modelo. – Entities: Objetos con identidad. – Value Objects: Objetos usados como atributos para describir otros objetos (no tienen identidad). – Services: Acciones que modifican objetos y estados en el dominio a pedido de un cliente.
  • 18. Associations • Por cada asociación en el modelo debe haber un mecanismo en el software con las mismas propiedades. • Tipos de asociaciones: – Uno-a-Uno – Uno-a-Muchos – Muchos-a-Muchos • Eliminar todas las relaciones innecesarias. • Eliminar bi-direccionalidades innecesarias.
  • 19. Entities • Algunos de los objetos no se definen principalmente por sus atributos. • Representan una identidad que se mantiene a lo largo de la aplicación. • Comúnmente la identidad es un atributo del objeto mismo, una combinación de atributos, o un atributo creado especialmente para expresar esa identidad. • Incluir atributos de identidad. • Incluir solo comportamiento que ayude a mantener su identidad.
  • 21. Value Objects • Algunos de los objetos no se definen principalmente por sus atributos. • Estos objetos sirven para describir otros objetos (Entities).
  • 23. Services • Son los verbos (acciones) del Modelo. • Agregan comportamiento al Modelo. • Manejan comportamiento no cohesivo a una Entity. • Contienen Lógica y Reglas de Dominio.
  • 24. Services (Características)) • La operación realizada por el Service refiere a un concepto de domino que no es realizado naturalmente por un Entity o un Value Object. • La operación realizada, modifica o usa otro objeto del dominio. • La operación no guarda estado.
  • 26. Módulos • Los módulos son grupos de elementos de dominio. • Proveen dos vistas del Modelo: » Vista de detalles del Módulo. » Vista de relación entre Módulos. • Compilables por separado. • Alta Cohesión y Bajo Acoplamiento.
  • 27. Mejando el Ciclo de Vida de los Objetos • Cada objeto del dominio tiene un ciclo de vida. • Retos del manejo del ciclo de vida: – Mantener la Integridad de los objetos a través del ciclo de vida. – Prevenir que el modelo se vea “inundado” por la complejidad del manejo del ciclo de vida. • Solución: Patrones para el manejo del ciclo de vida.
  • 28. Patrones para el Manejo del Ciclo de Vida • Aggregates: Proveen limites claros en el modelo, lo que permite reducir la complejidad del manejo. • Factories: Usados para encapsular la complejidad de la creación o reconstrucción de objetos complejos (Aggregates). • Repositories: Usados para encapsular la complejidad de tratar con objetos complejos persistentes. 2823 November 2016
  • 29. Aggregates • Un Aggregate es un grupo de objetos relacionados, tratados como uno solo. • Cada Aggregate tiene un objeto Raíz y un límite claramente definido. • Otros objetos solo pueden mantener referencias a la Raíz del Aggregate. • Cuando se elimina un Aggregate, se debe eliminar todo su contenido (entre sus limites) • Si es persistido, solo la Raíz debe ser obtenible por consultas. Objetos internos obtenidos a través de la raíz (uso de Lazy Load)
  • 31. Factories • Los Factories son objetos esenciales en la capa de dominio para encapsular la complejidad de crear y reconstruir objetos complejos. • Un Factory es un objeto que encapsula la lógica, el conocimiento y los mecanismos necesarios para crear objetos complejos (Aggregates) • A pesar de ser incluidos en la Capa de Domino, no pertenecen al modelo, son un recurso para disminuir la complejidad. • Distintas implementaciones (GoF): Abstract Factory, Factory Method, Builder.
  • 32. Factories • El proceso de creación debe ser tan atómico como sea posible. • Los Factories son especiales para crear Aggregates, cuando un Entity Raíz es creado, todos los objetos internos del Aggregate deben ser creados e inicializados sus valores. • A veces los Factories no son necesarios y un simple constructor puede ser utilizado: – La construcción no es compleja. – La creación de un objeto no involucra a otros, quizás todos los atributos necesarios son pasados como parámetros al constructor. – La implementación puede cambiar en tiempo de ejecución (patrón Strategy).
  • 33. Repositories • Los Respositories son objetos de dominio encargados de la persistencia de los demás objetos. • Encapsulan la lógica de persistencia y la conversación con la infraestrucutra. • Si un objeto debe ser persistido, se envía el mismo al Repository (no importa el medio) y este se encarga de hablar con la infraestrucura para persistirlo.
  • 34. Repositories • Los Repositories no manejan transacciones (tema tecnológico), estas son manejadas por la Capa de Aplicación. • Es común que los Repositories usen Factories para reconstruir objetos complejos (Aggregates). • Aíslan al dominio del medio de persistencia.
  • 35. Repositories • Los Repositories no manejan transacciones (tema tecnológico), estas son manejadas por la Capa de Aplicación. • Es común que los Repositories usen Factories para reconstruir objetos complejos (Aggregates). • Aíslan al dominio del medio de persistencia.
  • 36. Ejemplo de Implementación OrderFactory OrderRepository TotalCreditService +AddOrderLine(in orderLine) +IsOKAccordingToSize() : bool +IsOKAccordingToCreditLimit() : bool +Accept() -TotalAmount -OrderDate -OrderNumber -OrderType -Status Order -NumberOfItems OrderLine 1 * Reference Person 1 1
  • 37. Implementación Infraestrucura • Herramientas ORM. • Una posible solución: Hibernate, Nhibernate, Entity Framework. » Mapeo de objetos por metadata. » Implementación de Lazy Load.