Enable javascript in your browser for better experience. Need to know to enable it? Go here.
Domain Modeling: Lo que necesitas saber antes de codificar

Domain Modeling: Lo que necesitas saber antes de codificar

Comenzar a escribir código sin una planificación adecuada es como intentar construir muebles IKEA con una venda en los ojos. Si, contra todo pronóstico, de alguna manera logras armar algo parecido a una cómoda, es muy probable que hayas olvidado una pieza crucial y lo deseches todo en una semana. [1]

Cuando empezamos a jugar un juego nuevo,el cual desconocemos por completo, lo primero que nos preguntamos es ¿De qué se trata? ¿Cómo jugamos? ¿Cuáles son las reglas del juego? Algo muy parecido ocurre cuando desarrollamos software, necesitamos saber qué vamos a construir, qué conceptos de negocio están involucrados con el sistema y cómo se relacionan entre sí, en un tweet: necesitamos entender el dominio.

 

¿Dominio? ¿Qué es eso?

 

“Un dominio es una colección de conceptos y flujos de trabajo relacionados.” [2]. Estos son algunos ejemplos de dominios:

Modelo de Dominio (Domain Modeling)

Un modelo de dominio es una representación visual estructurada de conceptos interconectados u objetos del mundo real que incorpora vocabulario, comportamientos y relaciones de todas sus entidades. [3]

 

 

Construyendo un modelo de dominio

Cuando construimos una aplicación, el primer paso es  como dibujar en una pizarra. Un modelo de dominio nos ayuda a entender el mundo real de forma visual. En el modelo podemos ver de forma ilustrada lo siguiente:

  • Entidades definidas o clases conceptuales.

  • Asociaciones entre entidades.

Veamos un ejemplo explicado con un juego de batalla pokemon.

 

Paso 1: Entidades

El primer paso cuando estamos construyendo un modelo de dominio es pensar en qué entidades existen; pero ¿Qué es una entidad? Es todo lo que puede ser único, identificable, que existe y forma parte de un dominio.

 

Pensando en pokemons, nuestro dominio puede tener entidades como:

Paso 2: Relaciones entre entidades

 

Entonces, pokémon, tipo, movimiento, entrenador, equipo y batalla son entidades y existen en nuestro dominio de juego de batalla Pokémon. Cada dominio puede ser tan complejo o detallado como se requiera, en este caso vamos a explicar de forma muy sencilla como es un juego de batalla pokémon y cómo se relacionan las entidades entre sí:

 

Un pokemon es una criatura con poderes increíbles que puede pertenecer a uno o dos tipos, tiene un máximo de cuatro movimientos o habilidades las cuales solo pueden ser de un solo tipo, cada pokemon pertenece a un equipo manejado por un entrenador, cada equipo puede contener un máximo de seis pokemons y una batalla pokémon se realiza entre dos entrenadores con sus respectivos equipos. Ambos equipos se enfrentan en partidos uno a uno usando sus movimientos y el entrenador que derrote al equipo contrario ganará la batalla.

 

Aplicaremos una técnica útil, el análisis lingüístico: identificando los sustantivos y frases en la descripción textual de un dominio, y considerándolos como entidades o atributos.

Analicemos nuestro dominio:

  1. Cuando vemos una línea recta que conecta dos entidades juntas, esto nos muestra que estas dos entidades están relacionadas.

  2. Un verbo en el medio de la línea indica qué tipo de relación existe entre dos entidades. Por ejemplo, la entidad equipo "contiene" pokemon.

  3. Los números y el asterisco (*) al final de la línea indican multiplicidad, es decir, define cuántas instancias de una entidad A se pueden asociar con una instancia de una entidad B. Por ejemplo, una (1) batalla "está compuesta por" dos (*) entrenadores.

 

Ahora, agregaremos atributos y operaciones a nuestras entidades. Por ejemplo, para la entidad pokémon podemos tener algunos atributos como nombre y peso y operaciones como atacar y evolucionar. Veamos el siguiente modelo de dominio con atributos y operaciones:

Ahora tenemos un modelo más detallado llamado Diagrama de clases (Es el componente principal del modelado orientado a objetos. Se utiliza para el modelado conceptual general de la estructura de la aplicación y para el modelado detallado, traduciendo los modelos en código de programación). Para los atributos y operaciones agregamos los símbolos - y +, significan acceso privado (-) y público (+) para más información ver el siguiente vídeo

 

Podemos concluir que a partir de una entidad o clase podemos crear objetos o instancias. Por ejemplo, si queremos crear nuestro equipo pokémon con la entidad (o clase) pokémon con su tipo serían las plantillas y los pokémons serían nuestros objetos. Tendríamos algo como esto:

Los diamantes negros ⧫ son relaciones de composición: esto significa que una relación es totalmente fuerte de tal manera que conceptualmente una de estas clases no podría vivir si la otra no existiera. Por ejemplo: una hoja no podría existir sin un árbol, por lo que podemos decir que varias entidades "hoja" tienen una relación de composición con una entidad árbol.

Si estás interesado en aprender más sobre clases y objetos, consulta esto.

Nuevamente, el modelo de dominio puede ser tan detallado como lo necesitemos, lo importante es que entendamos que nos ayuda a visualizar mejor el problema que debemos resolver.

Referencias:

 

[1] Domain Modeling by Example. Associating Objects with Python. https://codeburst.io/rule-your-domain-model-d4beae6806c.

[2] Domain Modeling. http://www.cs.sjsu.edu/~pearce/modules/lectures/ooa/analysis/DomainModeling.htm

[3] A Brief Introduction to Domain Modeling. https://olegchursin.medium.com/a-brief-introduction-to-domain-modeling-862a30b38353

[4] Tutorial de diagramas de clases UML. https://www.youtube.com/watch?v=UI6lqHOVHic

[5] De POO a SOLID explicado con Pokémon por Jorge Mendez Ortega. https://medium.com/@jmz12/javascript-el-paradigma-de-poo-b04d19b6322c

Aviso legal: Las declaraciones y opiniones expresadas en este artículo son las del autor/a o autores y no reflejan necesariamente las posiciones de Thoughtworks.

Mantente al día con nuestros últimos conocimientos