INTRODUCCIÓN
Domain Driven Design (DDD) es un
enfoque para el desarrollo de software con necesidades complejas mediante una
profunda conexión entre la implementación y los conceptos del modelo y núcleo
del negocio. Las premisas del diseño guiado por el dominio son las siguientes:
·
Poner el foco primario del
proyecto en el núcleo y la lógica del dominio.
·
Basar los diseños complejos
en un modelo.
·
Iniciar una creativa
colaboración entre técnicos y expertos del dominio para interactuar lo más
cercano posible a los conceptos fundamentales del problema.
DISEÑO DIRIGIDO POR DOMINIOS
El diseño guiado por el dominio provee
una estructura de prácticas y terminologías para tomar decisiones de diseño que
enfoquen y aceleren el manejo de dominios complejos en los proyectos de
software.a
Definiciones Básicas.
·
Dominio: Un campo de conocimiento, influencia o actividad. El área
a la que el usuario aplica un programa es el dominio del software.
·
Modelo: un sistema de
abstracciones que describe aspectos de un dominio y se puede utilizar para resolver problemas
relacionados con ese dominio.
·
Lenguaje Ubicuo: un
lenguaje estructurado en torno al modelo de dominio y utilizado por todos los miembros del equipo para conectar todas
las actividades del equipo con el
software.
·
Contexto: El
entorno en el que una palabra o una
declaración aparece y el cual determina
su significado.
Contexto acotado (Bounded Context).
·
Define explícitamente el contexto dentro del cual se aplica un modelo.
·
Establece explícitamente los límites en términos de organización del
equipo, el uso de partes específicas de la aplicación, y las manifestaciones
físicas, tales como bases de código y los esquemas de bases de datos. Mantiene
el modelo estrictamente coherente dentro de estos límites, sin distracción ni
confusión por asuntos ajenos.
La integración continúa (Continuous Integration).
·
Establece un proceso de fusión de todo el código y otros artefactos de la
aplicación con frecuencia.
·
Se utiliza lenguaje ubicuo para elaborar una visión compartida del
modelo y ver como los conceptos evolucionan en la cabeza de diferentes
personas.
Mapa de contexto (Context Map).
·
Se identifica cada modelo en juego en el proyecto y
se define su contexto acotado.
·
Se incluyen los modelos implícitos de los subsistemas no orientados a
objetos.
·
Se identifica el nombre de cada contexto
acotado, y se definen parte de estos a través del lenguaje ubicuo.
·
Se describen los puntos de contacto entre los modelos, destacando la
clara traducción para cualquier comunicación o intercambio.
Bloques de construcción de DDD.
Una serie de conceptos de alto nivel y prácticas se
combinan en el lenguaje ubicuo, el cual debe formar el modelo de dominio. Este
lenguaje es definido por los expertos de dominio para describir los requisitos
del sistema, y funciona bien tanto para los usuarios de negocios o
patrocinadores como para los desarrolladores de software.
Algunos
conceptos definidos por DDD son:
·
Entidad:
Es un objeto que tiene un identificador único en el contexto que se trata.
· Value
Object: Es un objeto que tiene
atributos, pero no tiene identificador en el contexto y sirven para describir
cosas.
·
Servicio:
aparece cuando tenemos una funcionalidad que no pertenece a ningún objeto del
dominio, en tal caso creamos un nuevo objeto que no es del dominio y que tendrá
la responsabilidad de realizar esta funcionalidad.
·
Agregado:
Es una composición de objetos que tiene una entidad raiz. No hay acceso al
contenido del Agregado, y todas las operaciones que se quieran hacer sobre el
contenido siempre se harán a través de
la entidad raíz.
·
Factoría:
Crea objetos complejos (en muchos casos agregados) y objetos válidos (no
devolverá nulos).
·
Repositorio:
mantiene constantes las entidades y agregados.
CONCLUSIÓN
DDD no es ni una tecnología, ni una
metodología, es una forma de pensar que ayuda a entender el ámbito para el cual
estamos desarrollando software y a formalizar todo el conocimiento que los
expertos de dominio tienen en dicho ámbito, en un modelo.
REFERENCIAS:
·
http://en.wikipedia.org/wiki/Domain-driven_design