SlideShare una empresa de Scribd logo
1 de 22
DOMAIN-DRIVEN
DESING
LET’S GET STARTED
En un enfoque tradicional de diseño…
DOMAIN DRIVEN DESING
Presumimos que los casos de
uso son suficientes para que…
…los ingenieros de software
construyan un sistema.
En un enfoque tradicional de diseño…
DOMAIN DRIVEN DESING
Presumimos que los casos de
uso son suficientes para que…
…los ingenieros de software
construyan un sistema.
DOMAIN DRIVEN DESING
PERO NO SON
SUFICIENTES
¿De que se trata DDD?
DOMAIN DRIVEN DESING
Es un enfoque de desarrollo de software para necesidades complejas
enfocado en conectar profundamente la implementación con un modelo de negocios en
constante evolución
partiendo de la base del trabajo en equipo, la comunicación y colaboración constante
entre expertos técnicos (Ingenieros de Software) y expertos del dominio (Usuarios)
en contextos acotados de negocio
utilizando para ello un lenguaje ubicuo
“El software puede fallar por dos motivos: creamos las cosas mal o creamos las
cosas incorrectas”
Para implementar DDD:
DOMAIN DRIVEN DESING
• Lo primordial es mantener contacto constante y permanente con el experto del negocio utilizando un lenguaje ubicuo
• Mapea los dominios y sepáralos en subdominios
• Mira el panorama general del Proceso de Negocio As Is, aprendiendo sobre el dominio del problema
• Crea contextos acotados (Bounded Contexts) entre subdominios
• Idealmente, debe haber un equipo, una base de código y una base de datos diferentes para cada uno de los Bounded
Contexts
• Dado que todos estarían trabajando dentro de su propio Bounded Context, serían libres de cambiar cualquier cosa
dentro de este (siempre trabajando con los Expertos del Dominio y utilizando Lenguaje Ubicuo)
• Para todos los asuntos transversales que se comparten entre diferentes Bounded Contexts (lo llamamos Shared
Kernel), cualquier cambio debe ser conocido y acordado entre todos los equipos en cada Bounded Context afectado
(nuevamente, teniendo en cuenta que los equipos son conformados entre los expertos técnicos de sistemas y los
expertos del domino del negocio)
• Mantente siempre enfocado en los comportamientos del dominio en lugar del estado del dominio (favorece un
modelo rico sobre un modelo anémico)
¿Y qué no debemos hacer al implementar DDD?
DOMAIN DRIVEN DESING
1. Tener una vista centrada en los datos al modelar el dominio del problema.
Por lo general, el modelo de datos es lo primero que un arquitecto o ingeniero de software
comenzará a diseñar. Siempre consideran que los datos son lo más importante porque los
datos son todo lo que necesitamos informar. Con DDD, debemos cambiar este paradigma.
Los datos en sí mismos no tienen sentido. Sólo la lógica da a los datos un significado, y los
mismos datos pueden tener un significado diferente en contextos diferentes. Por lo tanto,
debemos comenzar con contexto y lógica en lugar de datos
¿Y qué no debemos hacer al implementar DDD?
DOMAIN DRIVEN DESING
2. Centrarse en los detalles de la implementación como entidades, objetos de
valor, servicios, fábricas y repositorios en lugar de los conceptos básicos del
negocio.
Las entidades, los objetos de valor, los repositorios, etc., no tienen un significado hasta que
definimos el lenguaje ubicuo, los contextos delimitados y las interfaces. Si comenzamos
pronto con los detalles de implementación como las entidades, entonces es muy probable
que el resultado sea un dominio anémico rodeado de una gran cantidad de servicios y lógica
empresarial dispersos por todas partes, que generan a su vez DEUDA TÉCNICA.
¿Y qué no debemos hacer al implementar DDD?
DOMAIN DRIVEN DESING
3. Usar términos y conceptos genéricos o técnicos de desarrollo al implementar
la aplicación.
Nunca debemos usar conceptos como save, update, delete, handle, manage, etc. Esos
conceptos son conceptos técnicos/abstractos y sin un significado específico para el usuario.
En cambio, debemos mantenernos enfocados en los conceptos de negocio. Los conceptos
mencionados anteriormente (es decir, save, update, etc.) no están relacionados con los
conceptos de negocios.
¿Y qué no debemos hacer al implementar DDD?
DOMAIN DRIVEN DESING
4. Sobreestimar las transacciones de bases de datos en lugar de centrarse en los
procesos y transacciones comerciales.
En DDD, las transacciones comerciales son más importantes que las transacciones de Bases
de Datos. Las transacciones de Bases de Datos son ACID, muy consistentes y de corta
ejecución, mientras que las transacciones comerciales no lo son. De hecho, en la vida real
solo conocemos las transacciones comerciales. Nunca pensemos en transacciones DB. En su
lugar, siempre pensemos en los procesos del mundo real, en las acciones (comportamientos)
y sus posibles resultados, y cómo compensar las acciones si se producen fallas.
¿Y qué no debemos hacer al implementar DDD?
DOMAIN DRIVEN DESING
1. Tener una vista centrada en los datos al modelar el dominio del problema.
2. Centrarse en los detalles de la implementación como entidades, objetos de
valor, servicios, fábricas y repositorios en lugar de los conceptos básicos del
negocio.
3. Usar términos y conceptos genéricos o técnicos de desarrollo al implementar
la aplicación.
4. Sobreestimar las transacciones de bases de datos en lugar de centrarse en los
procesos y transacciones comerciales.
DISEÑO
ESTRATÉGICO
ALGUNAS DEFINICIONES
¿Lenguaje Ubicuo, eso con que se come?
DOMAIN DRIVEN DESING
¿Y el contexto acotado?
DOMAIN DRIVEN DESING
CONTEXTO
DE LA VENTA
CONTEXTO
DEL SOPORTE
Modelado Conceptual Estratégico en DDD
DOMAIN DRIVEN DESING
DISEÑO TÁCTICO
OTRAS DEFINICIONES
Modelado Conceptual Táctico en DDD
DOMAIN DRIVEN DESING
Diseño Estratégico
DOMAIN DRIVEN DESING
Diseño Táctico
• AGREGADOS
• ENTIDADES
• OBJETOS DE VALOR
• SERVICIOS Y EVENTOS DEL DOMINIO
• REPOSITORIOS
• FACTORIAS
• ARQUITECTURA
El Meta Modelo Conceptual
DOMAIN DRIVEN DESING
DDD Y LOS
MICROSERVICIOS
ARQUITECTURA
Arquitectura en Capas y Microservicios
DOMAIN DRIVEN DESING
Presentation
Layer
API
Layer
Domain
Layer
Infraestructure
Layer
FUENTES
http://dddcommunity.org/

Más contenido relacionado

La actualidad más candente

Strategic Appplication Development with Domain-Driven Design (DDD)
Strategic Appplication Development with Domain-Driven Design (DDD)Strategic Appplication Development with Domain-Driven Design (DDD)
Strategic Appplication Development with Domain-Driven Design (DDD)
Dennis Traub
 
Orientación a tendencias de Arquitectura DDD
Orientación a tendencias de Arquitectura DDDOrientación a tendencias de Arquitectura DDD
Orientación a tendencias de Arquitectura DDD
Cesar Gomez
 

La actualidad más candente (20)

20190427 arquitectura de microservicios con contenedores
20190427 arquitectura de microservicios con contenedores20190427 arquitectura de microservicios con contenedores
20190427 arquitectura de microservicios con contenedores
 
Domain Driven Design Demonstrated
Domain Driven Design Demonstrated Domain Driven Design Demonstrated
Domain Driven Design Demonstrated
 
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
 
Modelling a complex domain with Domain-Driven Design
Modelling a complex domain with Domain-Driven DesignModelling a complex domain with Domain-Driven Design
Modelling a complex domain with Domain-Driven Design
 
Domain Driven Design (Ultra) Distilled
Domain Driven Design (Ultra) DistilledDomain Driven Design (Ultra) Distilled
Domain Driven Design (Ultra) Distilled
 
Domain driven design
Domain driven designDomain driven design
Domain driven design
 
Strategic Appplication Development with Domain-Driven Design (DDD)
Strategic Appplication Development with Domain-Driven Design (DDD)Strategic Appplication Development with Domain-Driven Design (DDD)
Strategic Appplication Development with Domain-Driven Design (DDD)
 
Domain Driven Design Quickly
Domain Driven Design QuicklyDomain Driven Design Quickly
Domain Driven Design Quickly
 
9.diseño de la arquitectura
9.diseño de la arquitectura9.diseño de la arquitectura
9.diseño de la arquitectura
 
NoSQL: Introducción a las Bases de Datos no estructuradas
NoSQL: Introducción a las Bases de Datos no estructuradasNoSQL: Introducción a las Bases de Datos no estructuradas
NoSQL: Introducción a las Bases de Datos no estructuradas
 
A Practical Guide to Domain Driven Design: Presentation Slides
A Practical Guide to Domain Driven Design: Presentation SlidesA Practical Guide to Domain Driven Design: Presentation Slides
A Practical Guide to Domain Driven Design: Presentation Slides
 
How to Speak the Language of Application Architecture
How to Speak the Language of Application ArchitectureHow to Speak the Language of Application Architecture
How to Speak the Language of Application Architecture
 
Domain Driven Design Introduction
Domain Driven Design IntroductionDomain Driven Design Introduction
Domain Driven Design Introduction
 
Introducción a microservicios
Introducción a microserviciosIntroducción a microservicios
Introducción a microservicios
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven Design
 
Orientación a tendencias de Arquitectura DDD
Orientación a tendencias de Arquitectura DDDOrientación a tendencias de Arquitectura DDD
Orientación a tendencias de Arquitectura DDD
 
Concorrência e Paralelismo em Elixir (e outras linguagens)
Concorrência e Paralelismo em Elixir (e outras linguagens)Concorrência e Paralelismo em Elixir (e outras linguagens)
Concorrência e Paralelismo em Elixir (e outras linguagens)
 
Arquitectura de software
Arquitectura de softwareArquitectura de software
Arquitectura de software
 
Arquitectura de microservicios
Arquitectura de microserviciosArquitectura de microservicios
Arquitectura de microservicios
 
DDD (Domain-Driven Design)
DDD (Domain-Driven Design)DDD (Domain-Driven Design)
DDD (Domain-Driven Design)
 

Similar a Domain driven desing

Introducción a DDD
Introducción a DDDIntroducción a DDD
Introducción a DDD
sergiopolo
 
Cas2010 behavior-driven-development-aplicado-en-acceptance-test-automation
Cas2010 behavior-driven-development-aplicado-en-acceptance-test-automationCas2010 behavior-driven-development-aplicado-en-acceptance-test-automation
Cas2010 behavior-driven-development-aplicado-en-acceptance-test-automation
Agile Spain
 
éXito en la implantación de un sistema business intelligence
éXito en la implantación de un sistema business intelligenceéXito en la implantación de un sistema business intelligence
éXito en la implantación de un sistema business intelligence
DANIEL VENTURA
 
Taller diseño-web
Taller diseño-webTaller diseño-web
Taller diseño-web
Clara Lopez
 
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
Javier Muñoz
 

Similar a Domain driven desing (20)

Introducción a DDD
Introducción a DDDIntroducción a DDD
Introducción a DDD
 
Meetup: Sesión #8 Domain Driven Design
Meetup: Sesión #8 Domain Driven DesignMeetup: Sesión #8 Domain Driven Design
Meetup: Sesión #8 Domain Driven Design
 
DDD
DDDDDD
DDD
 
Meetup bdd & tdd: aprovecha_su_poder
Meetup bdd & tdd: aprovecha_su_poderMeetup bdd & tdd: aprovecha_su_poder
Meetup bdd & tdd: aprovecha_su_poder
 
Introducción a la Nube Nativa - v1.0es (2021/03)
Introducción a la Nube Nativa - v1.0es (2021/03)Introducción a la Nube Nativa - v1.0es (2021/03)
Introducción a la Nube Nativa - v1.0es (2021/03)
 
Cas2010 behavior-driven-development-aplicado-en-acceptance-test-automation
Cas2010 behavior-driven-development-aplicado-en-acceptance-test-automationCas2010 behavior-driven-development-aplicado-en-acceptance-test-automation
Cas2010 behavior-driven-development-aplicado-en-acceptance-test-automation
 
Cloud & DevOps: encontrando seguridad y soporte en la nube.
Cloud & DevOps: encontrando seguridad y soporte en la nube.Cloud & DevOps: encontrando seguridad y soporte en la nube.
Cloud & DevOps: encontrando seguridad y soporte en la nube.
 
Domain driven design
Domain driven designDomain driven design
Domain driven design
 
(Behavior driven development (bdd ) [sólo lectura])
(Behavior driven development  (bdd ) [sólo lectura])(Behavior driven development  (bdd ) [sólo lectura])
(Behavior driven development (bdd ) [sólo lectura])
 
Presentación del video: ¿Necesito un ERP? ¿Cuál? Introducción a los sistemas ...
Presentación del video: ¿Necesito un ERP? ¿Cuál? Introducción a los sistemas ...Presentación del video: ¿Necesito un ERP? ¿Cuál? Introducción a los sistemas ...
Presentación del video: ¿Necesito un ERP? ¿Cuál? Introducción a los sistemas ...
 
Prestashop v1.6.1.4
Prestashop v1.6.1.4Prestashop v1.6.1.4
Prestashop v1.6.1.4
 
Introducción a DDD
Introducción a DDDIntroducción a DDD
Introducción a DDD
 
ADMINISTRACION DE BASE DE DATOS UNIDAD 1
ADMINISTRACION DE BASE DE DATOS UNIDAD 1ADMINISTRACION DE BASE DE DATOS UNIDAD 1
ADMINISTRACION DE BASE DE DATOS UNIDAD 1
 
Arquitectura de software y otros demonios
Arquitectura de software y otros demoniosArquitectura de software y otros demonios
Arquitectura de software y otros demonios
 
éXito en la implantación de un sistema business intelligence
éXito en la implantación de un sistema business intelligenceéXito en la implantación de un sistema business intelligence
éXito en la implantación de un sistema business intelligence
 
Documentación corporativa en la nube
Documentación corporativa en la nubeDocumentación corporativa en la nube
Documentación corporativa en la nube
 
Cursos share point-biztalk
Cursos share point-biztalkCursos share point-biztalk
Cursos share point-biztalk
 
Cursos share point-biztalk
Cursos share point-biztalkCursos share point-biztalk
Cursos share point-biztalk
 
Taller diseño-web
Taller diseño-webTaller diseño-web
Taller diseño-web
 
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
 

Domain driven desing

  • 2. En un enfoque tradicional de diseño… DOMAIN DRIVEN DESING Presumimos que los casos de uso son suficientes para que… …los ingenieros de software construyan un sistema.
  • 3. En un enfoque tradicional de diseño… DOMAIN DRIVEN DESING Presumimos que los casos de uso son suficientes para que… …los ingenieros de software construyan un sistema.
  • 4. DOMAIN DRIVEN DESING PERO NO SON SUFICIENTES
  • 5. ¿De que se trata DDD? DOMAIN DRIVEN DESING Es un enfoque de desarrollo de software para necesidades complejas enfocado en conectar profundamente la implementación con un modelo de negocios en constante evolución partiendo de la base del trabajo en equipo, la comunicación y colaboración constante entre expertos técnicos (Ingenieros de Software) y expertos del dominio (Usuarios) en contextos acotados de negocio utilizando para ello un lenguaje ubicuo “El software puede fallar por dos motivos: creamos las cosas mal o creamos las cosas incorrectas”
  • 6. Para implementar DDD: DOMAIN DRIVEN DESING • Lo primordial es mantener contacto constante y permanente con el experto del negocio utilizando un lenguaje ubicuo • Mapea los dominios y sepáralos en subdominios • Mira el panorama general del Proceso de Negocio As Is, aprendiendo sobre el dominio del problema • Crea contextos acotados (Bounded Contexts) entre subdominios • Idealmente, debe haber un equipo, una base de código y una base de datos diferentes para cada uno de los Bounded Contexts • Dado que todos estarían trabajando dentro de su propio Bounded Context, serían libres de cambiar cualquier cosa dentro de este (siempre trabajando con los Expertos del Dominio y utilizando Lenguaje Ubicuo) • Para todos los asuntos transversales que se comparten entre diferentes Bounded Contexts (lo llamamos Shared Kernel), cualquier cambio debe ser conocido y acordado entre todos los equipos en cada Bounded Context afectado (nuevamente, teniendo en cuenta que los equipos son conformados entre los expertos técnicos de sistemas y los expertos del domino del negocio) • Mantente siempre enfocado en los comportamientos del dominio en lugar del estado del dominio (favorece un modelo rico sobre un modelo anémico)
  • 7. ¿Y qué no debemos hacer al implementar DDD? DOMAIN DRIVEN DESING 1. Tener una vista centrada en los datos al modelar el dominio del problema. Por lo general, el modelo de datos es lo primero que un arquitecto o ingeniero de software comenzará a diseñar. Siempre consideran que los datos son lo más importante porque los datos son todo lo que necesitamos informar. Con DDD, debemos cambiar este paradigma. Los datos en sí mismos no tienen sentido. Sólo la lógica da a los datos un significado, y los mismos datos pueden tener un significado diferente en contextos diferentes. Por lo tanto, debemos comenzar con contexto y lógica en lugar de datos
  • 8. ¿Y qué no debemos hacer al implementar DDD? DOMAIN DRIVEN DESING 2. Centrarse en los detalles de la implementación como entidades, objetos de valor, servicios, fábricas y repositorios en lugar de los conceptos básicos del negocio. Las entidades, los objetos de valor, los repositorios, etc., no tienen un significado hasta que definimos el lenguaje ubicuo, los contextos delimitados y las interfaces. Si comenzamos pronto con los detalles de implementación como las entidades, entonces es muy probable que el resultado sea un dominio anémico rodeado de una gran cantidad de servicios y lógica empresarial dispersos por todas partes, que generan a su vez DEUDA TÉCNICA.
  • 9. ¿Y qué no debemos hacer al implementar DDD? DOMAIN DRIVEN DESING 3. Usar términos y conceptos genéricos o técnicos de desarrollo al implementar la aplicación. Nunca debemos usar conceptos como save, update, delete, handle, manage, etc. Esos conceptos son conceptos técnicos/abstractos y sin un significado específico para el usuario. En cambio, debemos mantenernos enfocados en los conceptos de negocio. Los conceptos mencionados anteriormente (es decir, save, update, etc.) no están relacionados con los conceptos de negocios.
  • 10. ¿Y qué no debemos hacer al implementar DDD? DOMAIN DRIVEN DESING 4. Sobreestimar las transacciones de bases de datos en lugar de centrarse en los procesos y transacciones comerciales. En DDD, las transacciones comerciales son más importantes que las transacciones de Bases de Datos. Las transacciones de Bases de Datos son ACID, muy consistentes y de corta ejecución, mientras que las transacciones comerciales no lo son. De hecho, en la vida real solo conocemos las transacciones comerciales. Nunca pensemos en transacciones DB. En su lugar, siempre pensemos en los procesos del mundo real, en las acciones (comportamientos) y sus posibles resultados, y cómo compensar las acciones si se producen fallas.
  • 11. ¿Y qué no debemos hacer al implementar DDD? DOMAIN DRIVEN DESING 1. Tener una vista centrada en los datos al modelar el dominio del problema. 2. Centrarse en los detalles de la implementación como entidades, objetos de valor, servicios, fábricas y repositorios en lugar de los conceptos básicos del negocio. 3. Usar términos y conceptos genéricos o técnicos de desarrollo al implementar la aplicación. 4. Sobreestimar las transacciones de bases de datos en lugar de centrarse en los procesos y transacciones comerciales.
  • 13. ¿Lenguaje Ubicuo, eso con que se come? DOMAIN DRIVEN DESING
  • 14. ¿Y el contexto acotado? DOMAIN DRIVEN DESING CONTEXTO DE LA VENTA CONTEXTO DEL SOPORTE
  • 15. Modelado Conceptual Estratégico en DDD DOMAIN DRIVEN DESING
  • 17. Modelado Conceptual Táctico en DDD DOMAIN DRIVEN DESING
  • 18. Diseño Estratégico DOMAIN DRIVEN DESING Diseño Táctico • AGREGADOS • ENTIDADES • OBJETOS DE VALOR • SERVICIOS Y EVENTOS DEL DOMINIO • REPOSITORIOS • FACTORIAS • ARQUITECTURA
  • 19. El Meta Modelo Conceptual DOMAIN DRIVEN DESING
  • 21. Arquitectura en Capas y Microservicios DOMAIN DRIVEN DESING Presentation Layer API Layer Domain Layer Infraestructure Layer