SlideShare uma empresa 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

Mais conteúdo relacionado

Mais procurados

Introducción a DDD
Introducción a DDDIntroducción a DDD
Introducción a DDDsergiopolo
 
Implementing Domain-Driven Design (Study Group) Chapter 3 - Context Maps
Implementing Domain-Driven Design (Study Group) Chapter 3 - Context Maps Implementing Domain-Driven Design (Study Group) Chapter 3 - Context Maps
Implementing Domain-Driven Design (Study Group) Chapter 3 - Context Maps Eason Kuo
 
Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)Tom Kocjan
 
Unt 3 attributes, methods, relationships-1
Unt 3 attributes, methods, relationships-1Unt 3 attributes, methods, relationships-1
Unt 3 attributes, methods, relationships-1gopal10scs185
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven DesignAndriy Buday
 
Let us understand design pattern
Let us understand design patternLet us understand design pattern
Let us understand design patternMindfire Solutions
 
Domain driven design and model driven development
Domain driven design and model driven developmentDomain driven design and model driven development
Domain driven design and model driven developmentDmitry Geyzersky
 
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
 
Domain Driven Design Quickly
Domain Driven Design QuicklyDomain Driven Design Quickly
Domain Driven Design QuicklyMariam Hakobyan
 
Domain Driven Design Demonstrated
Domain Driven Design Demonstrated Domain Driven Design Demonstrated
Domain Driven Design Demonstrated Alan Christensen
 
شرح Domain Driven Design بالعربي
شرح Domain Driven Design بالعربيشرح Domain Driven Design بالعربي
شرح Domain Driven Design بالعربيMohamed Galal
 
3 Level Architecture
3 Level Architecture3 Level Architecture
3 Level ArchitectureAdeel Rasheed
 

Mais procurados (20)

Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Unified Modeling Language
Unified Modeling LanguageUnified Modeling Language
Unified Modeling Language
 
Introducción a DDD
Introducción a DDDIntroducción a DDD
Introducción a DDD
 
Implementing Domain-Driven Design (Study Group) Chapter 3 - Context Maps
Implementing Domain-Driven Design (Study Group) Chapter 3 - Context Maps Implementing Domain-Driven Design (Study Group) Chapter 3 - Context Maps
Implementing Domain-Driven Design (Study Group) Chapter 3 - Context Maps
 
Gof design patterns
Gof design patternsGof design patterns
Gof design patterns
 
Object modeling
Object modelingObject modeling
Object modeling
 
Domain driven design
Domain driven designDomain driven design
Domain driven design
 
Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)
 
Unt 3 attributes, methods, relationships-1
Unt 3 attributes, methods, relationships-1Unt 3 attributes, methods, relationships-1
Unt 3 attributes, methods, relationships-1
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven Design
 
Let us understand design pattern
Let us understand design patternLet us understand design pattern
Let us understand design pattern
 
Domain driven design and model driven development
Domain driven design and model driven developmentDomain driven design and model driven development
Domain driven design and model driven development
 
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
 
Domain Driven Design Quickly
Domain Driven Design QuicklyDomain Driven Design Quickly
Domain Driven Design Quickly
 
Domain Driven Design Demonstrated
Domain Driven Design Demonstrated Domain Driven Design Demonstrated
Domain Driven Design Demonstrated
 
شرح Domain Driven Design بالعربي
شرح Domain Driven Design بالعربيشرح Domain Driven Design بالعربي
شرح Domain Driven Design بالعربي
 
Component Diagram
Component DiagramComponent Diagram
Component Diagram
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
OOAD
OOADOOAD
OOAD
 
3 Level Architecture
3 Level Architecture3 Level Architecture
3 Level Architecture
 

Destaque (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
 

Semelhante 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
 

Semelhante 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...
 

Mais de Mariano Sánchez

Mais 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.