E096_Lenguaje ubícuo. Diseño (de software) Dirigido por Dominios
Ep. 96

E096_Lenguaje ubícuo. Diseño (de software) Dirigido por Dominios

Episode description

Episodio de BIMPRAXIS: Diseño Guiado por el Dominio

En este episodio de BIMPRAXIS, exploramos el concepto de Diseño Guiado por el Dominio (Domain Driven Design), un enfoque que busca mejorar la complejidad del software alineando el código con el negocio. A través de ejemplos prácticos y casos de estudio, se analiza cómo este enfoque puede ayudar a los equipos técnicos a crear software más flexible, resistente y poderoso, al tiempo que se reduce la sobrecarga de la traducción entre el lenguaje del negocio y el técnico. Se discuten conceptos clave como el lenguaje ubicuo, la arquitectura en capas y la importancia de que los programadores sean también modeladores. El episodio ofrece una visión profunda de cómo aplicar estos principios para lograr un diseño flexible y eficaz en el desarrollo de software.

Download transcript (.srt)
0:09

Buenas, esto es BIMPRAXIS, el podcast donde el

0:15

BIM se encuentra con la inteligencia artificial.

0:20

Exploramos la ciencia, la tecnología y el futuro

0:23

desde el enfoque de la arquitectura, ingeniería y

0:26

construcción.

0:28

¡Empezamos!

0:36

Muy buenas, bienvenidas, bienvenidos a un nuevo episodio

0:40

de BIMPRAXIS.

0:41

Hoy os traemos el diseño guiado por el

0:43

dominio.

0:44

¿Cómo domar la complejidad en el corazón del

0:46

software?

0:46

Hola a todos.

0:48

Y, bueno, hoy vamos a sumergirnos en un

0:51

problema que, a ver, seamos completamente sinceros, es

0:53

algo que persigue como un fantasma a casi

0:56

cualquier equipo técnico en algún momento de su

0:58

existencia.

0:59

Totalmente.

1:00

A todos nos ha pasado.

1:01

Es que, imaginad la situación.

1:03

Empezáis un proyecto, todo es optimismo, los diagramas

1:06

en la pizarra están limpios, la arquitectura parece

1:09

impecable y, de repente… Pasan un par de

1:11

años y es un monstruo.

1:13

Exacto, un monstruo implacable.

1:15

Hablamos de un código incompatible.

1:16

Incomprensible, extremadamente rígido, donde vas y cambias una

1:20

simple coma para, no sé, añadir una función

1:22

minúscula, y misteriosamente se rompen tres cosas distintas

1:25

en otra parte del sistema.

1:27

¡Qué locura!

1:27

Pero es el pan de cada día, ¿verdad?

1:29

Para hoy es fascinante.

1:31

Porque casi nunca es por falta de habilidades

1:34

técnicas o porque los programadores no sepan teclear.

1:37

Vamos.

1:38

Claro, no es eso.

1:39

Es porque el código, en algún punto oscuro

1:42

del camino, se ha desconectado por completo de

1:44

la realidad viva, palpitante del negocio que intentaba

1:48

modelar.

1:49

Así que vamos a explorar a fondo el

1:51

legendario enfoque de Eric Evans, conocido mundialmente como

1:54

el Domain Driven Design, o, bueno, diseño guiado

1:58

por el dominio.

1:59

Y el planteamiento de ese problema que haces

2:01

es fundamental.

2:02

Porque, a ver, el objetivo de nuestro análisis

2:05

a fondo de hoy no es aprender un

2:07

nuevo truco para picar código más rápido.

2:09

Ya, no venimos a eso.

2:11

Ni vamos a hablar de dominar el último

2:13

framework que se ha puesto de moda esta

2:15

semana, que siempre hay uno nuevo.

2:16

Hoy venimos a aprender a pensar sobre el

2:18

software de una manera radicalmente distinta.

2:21

A pensar, exacto.

2:22

La misión de esta exploración es, digamos, descubrir

2:26

cómo los equipos puramente técnicos y los verdaderos

2:29

expertos del negocio pueden llegar a fusionar sus

2:32

mentes.

2:33

Qué bien suena eso.

2:34

Sí, es decir, cómo pueden destilar lo que

2:37

en este ámbito llamamos un modelo profundo.

2:39

Para coger toda esa complejidad caótica, confusa y

2:42

desordenada del mundo real y convertirla en un

2:45

sistema de software, que sea de verdad flexible,

2:48

resistente al paso del tiempo y excepcionalmente poderoso.

2:52

Pues vamos a desgranar esto paso a paso.

2:54

Porque, para resolver el problema de ese software

2:56

caótico que acaba, pues, pudriéndose, primero tenemos que

3:00

entender cómo demonios se captura el conocimiento en

3:02

un proyecto.

3:03

Esa es la clave.

3:04

Históricamente, la inercia de la industria era muy

3:07

simple.

3:07

Tú te sientas con el cliente, le pides

3:09

que te dicte una lista de requisitos o

3:11

de funcionabilidades y te pones a programar como

3:14

si no hubiera un mañana.

3:15

La famosa lista de la compra, sí.

3:18

Exacto.

3:18

Pero aquí vemos que eso es una receta

3:20

garantizada para el desastre.

3:22

No podemos simplemente pedir esa lista.

3:24

Tenemos que hacer un esfuerzo activo que, bueno,

3:27

Evans denomina el triturado de conocimiento.

3:29

El knowledge crunching.

3:31

Y fíjate que el concepto del triturado de

3:34

conocimiento rompe totalmente con la idea pasiva del

3:37

programador.

3:38

Ese programador visto como un mero transcriptor.

3:41

Ya, el que solo toma notas.

3:43

Eso es.

3:43

Y para ilustrar cómo funciona.

3:45

Y para ilustrar cómo funciona esto en la

3:46

realidad, el texto nos sumerge en una anécdota

3:48

muy reveladora sobre el diseño de una herramienta

3:51

de software para placas de circuito impreso.

3:53

Los típicos PCBs de la electrónica.

3:56

Los de toda la vida, sí.

3:57

Los que llevan todos nuestros aparatos.

3:59

Pues a ver, el desarrollador de software asignado

4:02

al proyecto no sabía absolutamente nada de ingeniería

4:06

eléctrica.

4:07

Cero.

4:07

Su conocimiento era cero.

4:09

Cero patatero.

4:10

Y como era de esperar, pues las primeras

4:12

reuniones conjuntas fueron un desastre absoluto.

4:15

Me lo puedo imaginar, claro.

4:17

Los ingenieros de hardware estaban frustrados, intentaban explicar

4:20

lo que necesitaban, pero claro, para hacerse entender

4:23

por el informático, terminaban pidiendo funciones aburridísimas y

4:26

mecánicas de bases de datos.

4:28

O sea, bajando al barro técnico.

4:30

Exacto.

4:31

Decían cosas como, necesito que el programa lea

4:34

este archivo de texto inmenso, que ordene las

4:37

filas por este parámetro y escupa un informe

4:40

en pantalla.

4:40

Claro.

4:41

Lo que estaba ocurriendo ahí es un clásico.

4:43

Los ingenieros de hardware estaban...

4:45

Estaban intentando hacer el trabajo de diseño de

4:47

software por el programador.

4:49

Totalmente.

4:49

Editaban operaciones de datos y, a su vez,

4:52

pues el programador intentaba asimilar años de ingeniería

4:55

eléctrica de golpe.

4:56

Un caos absoluto donde al final nadie aportaba

4:59

su verdadero valor.

5:00

Y el proyecto se habría estancado ahí de

5:03

no ser por un punto de inflexión que

5:05

fue crucial.

5:06

Dejaron de hablar en abstracto.

5:07

¿Vale?

5:08

Dejaron de pasarse listas de funciones y se

5:11

pusieron frente a una pizarra a dibujar diagramas

5:13

juntos.

5:13

El momento mágico de la pizarra.

5:15

Siempre funciona.

5:17

El desarrollador empezó a esbozar cajas, líneas, intentando

5:20

representar el problema físico real y, de repente,

5:23

de todo ese torrente de jerga incomprensible, lograron

5:26

extraer un concepto clave.

5:28

¿Cuál fue?

5:29

Pues los ingenieros de hardware hablaban constantemente de

5:32

algo que llamaban NETS, que son, esencialmente, las

5:35

redes físicas de conductores que conectan los distintos

5:38

componentes en la placa.

5:39

Ah, vale, las redes.

5:41

Y también hablaban de HOPS, que son los

5:43

saltos individuales, de un punto a otro.

5:46

El problema real de los ingenieros era detectar

5:49

retrasos críticos en las señales si había demasiados

5:52

saltos en una red.

5:53

Claro, claro.

5:54

Al dibujar esto en la pizarra y darle

5:56

un nombre concreto a esas ideas, extrajeron oro

5:59

puro de toda esa maraña de información técnica.

6:02

Y eso es exactamente el triturado de conocimiento.

6:05

O sea, no es tomar notas.

6:07

No es tomar notas al dictado en una

6:09

reunión.

6:10

Es sondear.

6:11

Es masticar la información.

6:13

Probar ideas equivocadas incluso.

6:15

Y destilar un modelo conceptual hasta que tenga

6:18

perfecto sentido para ambas partes.

6:20

Aquí es donde se pone muy interesante.

6:22

Paremos un momento a analizar esto.

6:24

Porque, a ver, una vez que consigues ese

6:27

concepto brillante en la pizarra, te enfrentas al

6:29

problema del día a día, a la comunicación

6:31

real durante los meses que dura el desarrollo.

6:34

Ya, eso es otra historia.

6:35

En la gran mayoría de los proyectos, vivimos

6:38

atrapados en una especie de teléfono escacharrado permanente.

6:41

¡Qué gran verdad!

6:42

Es que es como pedir comida a domicilio

6:45

con su jerga legal.

6:46

Si el cliente llama y dice, no sé,

6:49

deseo anular el contrato de abastecimiento.

6:51

¡Madre mía!

6:52

Claro, el restaurante no sabe si tiene que

6:54

cancelar el pedido de patatas fritas o si

6:56

tiene que despedir a su proveedor de carne,

6:58

¿sabes?

6:59

Claro, claro.

7:00

Esa traducción intermedia es el lugar oscuro donde

7:03

los errores y los bugs se esconden y

7:05

se reproducen a sus anchas.

7:07

Los expertos de negocio hablan su jerga logística

7:09

o financiera en sus reuniones.

7:12

Sí.

7:12

Luego llegan los analistas de sistemas que lo

7:14

traducen a su propia jerga de diagramas funcionales

7:17

y finalmente los programadores cogen ese documento y

7:20

lo vuelven a traducir a su jerga técnica.

7:22

Hablar de tablas.

7:23

Tablas de bases de datos, variables string, bucles

7:26

for, es una locura.

7:27

Es una locura, sí.

7:29

Y el riesgo de esa traducción intermedia es

7:32

que los fallos del modelo conceptual quedan completamente

7:35

ocultos bajo unas capas inmensas de malentendidos.

7:39

Ya te digo.

7:40

Si cada estrato del equipo habla su propio

7:43

idioma, pues nadie se da cuenta de que

7:45

en realidad no se están entendiendo en absoluto

7:47

y no se dan cuenta hasta que el

7:49

software se despliega en producción.

7:50

Y bueno, fracasas trepitosamente.

7:53

El peor momento posible.

7:54

Exacto.

7:55

Así que la solución que propone el diseño

7:57

guiado por el dominio para aniquilar este teléfono

8:00

escacharrado es la instauración de lo que se

8:02

conoce como el lenguaje Ubiquo, el Ubiquus Language.

8:06

Eso es.

8:07

Y la regla aquí es estricta y radical.

8:10

Tiene que haber un idioma único.

8:12

Un solo idioma.

8:13

Un vocabulario que se construye basándose estrictamente en

8:17

ese modelo de dominio que el equipo ha

8:19

destilado en la pizarra, ¿no?

8:21

Y ese vocabulario se debe usar de forma

8:24

implacable e innegociable en todas partes.

8:27

En todas partes.

8:28

En las conversaciones de pasillo, en los documentos

8:30

técnicos, en las reuniones con el cliente y

8:33

lo que es infinitamente más crítico en el

8:35

propio código fuente.

8:36

A ver, vamos a desgranar esto poniéndonos un

8:39

poco en la piel de un equipo real,

8:40

porque es muy fácil decir.

8:42

Hablemos todos el mismo idioma, pero es como

8:44

intentar construir un edificio donde el arquitecto habla

8:47

francés, el capataz japonés y solo se comunican

8:50

mediante dibujos abstractos.

8:52

Ya, es complicado.

8:53

Pero ¿acaso no es natural que los expertos

8:55

en negocio usen su jerga y los programadores

8:58

la suya?

8:59

O sea, romper con los hábitos de un

9:01

programador que lleva diez años hablando de bases

9:03

de datos para forzar un único idioma parece

9:06

una tarea titánica.

9:07

¿Por qué forzarlo tanto?

9:08

Porque la sobrecarga de la traducción, como decíamos,

9:12

oculta los fallos.

9:13

Fíjate en la diferencia abismal de claridad con

9:15

un ejemplo real que recogen los textos.

9:18

Está centrado en el desarrollo de un sistema

9:21

para una agencia de transporte de mercancías.

9:23

El famoso cargo router.

9:25

Exacto, el cargo router.

9:27

Pues vamos a comparar dos formas de afrontar

9:29

la misma petición.

9:30

En el escenario tradicional de toda la vida,

9:33

el usuario del negocio dice oye, si cambia

9:36

la política de la aduana en un puerto,

9:37

hay que rehacer la ruta del cargamento.

9:40

Vale, lógico.

9:41

Y el programador, pensando en su mundo técnico,

9:44

responde vale, si ocurre ese evento, pues borraré

9:48

las filas correspondientes en la tabla de la

9:51

base de datos del MIOS y le pasaré

9:53

los datos al servicio de backend para que

9:55

la vuelva a poblar con la nueva información.

9:58

Uf, me duele la cabeza solo de visualizar

10:00

esa conversación.

10:01

Es terrible.

10:02

Están físicamente en la misma sala, pero habitan

10:05

universos conceptuales totalmente distintos.

10:07

O sea, si el negocio pide un cambio

10:09

sutil sobre cómo funciona la aduana, el programador

10:12

va a estar pensando en índices de tablas

10:14

en lugar de pensar en barcos y en

10:16

contenedores.

10:17

Exactamente.

10:18

Y ahora imagina la segunda conversación, donde el

10:20

equipo ya ha implementado un lenguaje ubicua riguroso.

10:23

A ver, el usuario dice exactamente lo mismo

10:26

sobre la aduana y el programador responde usando

10:30

el modelo y dice entendido, si cambias algún

10:33

atributo en la especificación de la ruta, comprobaremos

10:37

si el itinerario actual todavía la satisface.

10:40

Ajá.

10:40

Si no la satisface, generaremos un nuevo itinerario.

10:44

Ostras, qué diferencia.

10:45

Fíjate en el cambio de paradigma.

10:47

Ambos están utilizando conceptos concretos y compartidos.

10:51

Hablan de especificaciones de ruta y de itinerarios.

10:54

Ya no hay filas.

10:55

Ya no hay filas que se borran ni

10:57

tablas que se pueblan.

10:58

Nada de eso.

10:59

Si el modelo conceptual tiene un fallo lógico,

11:02

salta a la vista inmediatamente durante la charla,

11:05

porque ambos están usando las mismas palabras.

11:07

Claro, es transparente.

11:08

Y la magia reside en que si un

11:10

nuevo desarrollador abre el código, al día siguiente

11:13

no verá variables genéricas.

11:15

Va a haber clases y métodos que se

11:17

llaman literalmente especificación de ruta e itinerario.

11:21

Vale, vale, entiendo el inmenso valor de esto.

11:24

Lograr hablar el mismo idioma en una sala

11:26

de reuniones frente a un café, pues es

11:28

un triunfo.

11:29

Pero la realidad es tozuda.

11:31

Sí lo es.

11:32

Si ese modelo conceptual tan puro del que

11:34

hablas no se traduce de forma literal, directa

11:37

y sin fricciones al código, pues todo el

11:40

esfuerzo de la pizarra no sirve absolutamente para

11:42

nada, para nada.

11:44

Y esto, fíjate, nos abre la puerta a

11:45

un debate bastante candente en nuestra exploración de

11:48

hoy.

11:48

Esa unión indisoluble entre el modelo y la

11:51

implementación.

11:51

Y bueno, la polémica afirmación de que los

11:54

programadores tienen que ser modeladores y viceversa.

11:57

Es un punto de inflexión en cómo organizamos

12:00

los equipos de tecnología en las empresas, porque

12:02

desafía frontalmente una trampa mortal en la que

12:05

ha caído nuestra industria durante muchos años.

12:07

¿Cuál es?

12:08

El modelo de la cadena de montaje.

12:10

Ah, sí.

12:11

Durante décadas se ha promovido esta idea organizativa

12:15

de que debemos tener a unos arquitectos de

12:18

software de élite super brillantes que diseñan los

12:22

modelos conceptuales ahí arriba en su torre de

12:24

marfil.

12:25

Intocables.

12:26

Eso es.

12:26

Y luego, una vez que han terminado los

12:28

planos, se los pasan a unos programadores rasos

12:31

que, bueno, simplemente ensamblan el código como si

12:35

fueran operarios apretando tuercas en una fábrica de

12:37

coches.

12:38

Pero espera, espera.

12:39

Esto va un poco en contra de todo

12:41

lo que acompaña a la industrialización, ¿no?

12:43

A ver.

12:44

La intuición más básica nos grita que la

12:46

especialización extrema es lo que trae la eficiencia.

12:49

O sea, Henry Ford revolucionó el mundo así.

12:52

No es un desperdicio absoluto de presupuesto y

12:55

de talento que un arquitecto de sistemas de

12:57

altísimo nivel que cobra un dineral se ponga

13:00

a escribir código mundano del día a día.

13:02

Pues la intuición nos dice eso, efectivamente.

13:05

Pero aplicarlo al software es una falacia enorme,

13:09

enorme.

13:10

¿Por qué?

13:11

En la construcción tradicional o en la fábrica

13:14

de coches, el plano no es el producto,

13:16

pero en el desarrollo de software todo es

13:19

diseño.

13:20

El código fuente no es el ensamblaje, es

13:23

el diseño final en sí mismo.

13:25

Qué interesante verlo así.

13:26

Los documentos exponen un caso que es tristemente

13:29

habitual, donde un equipo tenía esta separación jerárquica

13:32

estricta.

13:33

Los modeladores estrella hicieron un trabajo excelente, pero

13:37

claro, en sus cabezas.

13:39

En la teoría.

13:40

Pasaron meses diseñando unos diagramas UML inmensos, preciosos,

13:45

que parecían obras de arte de la lógica

13:47

de negocio.

13:48

Pero en el momento en que un programador

13:50

de esa cadena de montaje intentó convertir esos

13:53

dibujos en código real, se estrelló.

13:55

Se estrelló violentamente contra las limitaciones de la

13:59

base de datos y de la red.

14:00

Como los arquitectos no bajaban a la trinchera

14:03

a tocar el código, pues nunca recibieron el

14:05

feedback empílico de esas limitaciones tecnológicas.

14:10

El papel lo aguanta todo, pero el ordenador

14:12

no.

14:12

Exacto.

14:13

El modelo colapsó y el proyecto fracasó estrepitosamente.

14:16

La conclusión del diseño guiado por el dominio

14:19

aquí es innegociable.

14:21

Todo el que modela debe tocar código y

14:23

todo el que programa debe entender y participar

14:26

activamente en la evolución del modelo.

14:28

Tienen que ser modeladores prácticos.

14:31

Hands on modelers.

14:32

Eso es.

14:32

Tienen que mancharse las manos de barro, básicamente.

14:35

Pero claro, para que un desarrollador pueda expresar

14:38

un modelo de negocio de forma tan limpia

14:40

en el código, sin volverse loco intentando que

14:43

funcione en una pantalla, la propia arquitectura técnica

14:47

del sistema tiene que ponérselo fácil.

14:49

Totalmente.

14:50

Tiene que haber como un muro de contención,

14:52

¿no?

14:52

Y ese muro de contención es lo que

14:55

conocemos como arquitectura en capas.

14:57

La famosa layered architecture.

14:59

Vale.

15:00

Si quieres que tu código hable ese lenguaje

15:02

ubicuo, tienes que aislar físicamente el dominio.

15:06

¿Aislarlo?

15:07

Sí.

15:07

Que es la capa donde viven única y

15:09

exclusivamente las reglas de negocio.

15:12

Tienes que separarlo de todas las demás preocupaciones

15:15

tecnológicas.

15:16

Separarlo de la interfaz de usuario, de la

15:18

base de datos, del envío de correos electrónicos,

15:21

de la red.

15:22

Todo.

15:22

Claro, porque si mezclas...

15:24

Es que si el código que calcula si

15:25

un cliente tiene derecho a un descuento está

15:28

mezclado en el mismo archivo con las consultas

15:30

SQL a la base de datos o con

15:32

el código que pinta un botón rojo en

15:35

el navegador, es literalmente imposible que ese código

15:38

refleje nítidamente el modelo de negocio.

15:41

Esto es fundamental para entender por qué los

15:43

sistemas se vuelven incomprensibles.

15:45

Pero ¿cómo se ve este aislamiento en la

15:48

práctica?

15:49

Me gustaría entender cómo se saca a la

15:51

luz una de esas reglas de negocio vitales

15:54

que suelen estar enterradas bajo toneladas de código

15:56

técnico.

15:57

Pues hay un ejemplo cristalino de los textos,

16:00

que es la política de overbooking.

16:02

Ah, la sobreventa.

16:03

Sí, la sobreventa en el sector del transporte

16:05

marítimo.

16:06

En este negocio es una regla estratégica crucial

16:09

permitir que un barco de carga acepte reservas

16:12

hasta un 10 por ciento por encima de

16:14

su capacidad física máxima.

16:15

Porque siempre hay cancelaciones.

16:17

Porque saben estadísticamente que siempre hay cancelaciones de

16:20

última hora.

16:20

Exacto.

16:21

Bueno, pues en el sistema heredado antiguo, esta

16:23

regla de negocio vital para la rentabilidad de

16:26

la empresa estaba oculta.

16:27

¿Dónde?

16:27

Estaba oculta como un simple y triste cálculo

16:30

matemático, un capacidad por 1 .1, embutido en

16:35

medio de un gigantesco método que guardaba datos

16:38

en la base.

16:39

Imagina ser un experto en logística marítima que

16:42

intenta auditar ese código.

16:44

Llegas, ves un asterisco, ves un 1 .1

16:47

y piensas, pero ¿qué demonios es esto?

16:50

Un misterio.

16:51

Es un impuesto portuario, una tasa de conversión

16:54

de moneda.

16:54

Esa línea no significa absolutamente nada para el

16:57

negocio.

16:58

Y si alguien, no sé, cambia ese 1

17:00

.1 por un 1 .2 por error, la

17:03

empresa puede perder millones sin que nadie se

17:05

dé cuenta.

17:06

Exacto.

17:07

Es un peligro constante.

17:09

Y al aplicar los principios de esta filosofía,

17:12

lo que hicieron los desarrolladores fue extraer ese

17:15

oscuro cálculo matemático y crearon un objeto explícito

17:19

y con nombre propio en la capa de

17:21

dominio.

17:21

¿Y cómo lo llamaron?

17:22

Lo bautizaron literalmente como política de overbooking.

17:26

Qué claridad.

17:27

De repente, esa regla de negocio tiene su

17:29

propio espacio físico en el código.

17:31

Es visible para todos.

17:33

Se puede probar matemáticamente de forma aislada.

17:36

Sin tener que levantar toda la base de

17:38

datos.

17:38

Claro, mucho más rápido.

17:39

Y lo más importante, es comprensible y auditable.

17:43

El conocimiento implícito del negocio se transformó por

17:46

fin en un artefacto de software explícito.

17:49

Vale, entiendo el proceso perfectamente.

17:51

Ya hemos aislado nuestro modelo en una capa

17:53

pura.

17:53

Todos hablamos el lenguaje ubicuo y no hay

17:56

ni rastro de esa jerga técnica mezclada con

17:58

nuestras reglas de logística o de finanzas.

18:00

Eso es.

18:01

Pero a ver, bajando un peldaño más hacia

18:03

la sala de máquinas, ¿qué forma toman las

18:06

piezas de código puro?

18:07

Porque no todo en la vida real se

18:09

comporte igual.

18:10

No todo puede ser simplemente un objeto genérico

18:12

sin más definición, ¿verdad?

18:13

No, no.

18:14

Tiene que haber matices para representar la realidad.

18:16

Totalmente.

18:17

El enfoque nos proporciona unas herramientas de categorización

18:21

muy precisas para esto.

18:23

Desglosa los conceptos del mundo real en tres

18:25

bloques de construcción principales dentro del dominio.

18:28

A ver, ¿cuáles son?

18:30

Son las entidades, los objetos de valor y

18:32

los servicios.

18:33

Vale.

18:34

Empecemos definiendo las entidades.

18:36

O entities son aquellas cosas fundamentales del negocio

18:39

que tienen un hilo de identidad constante a

18:42

través del tiempo.

18:43

Una identidad.

18:44

Sí, sin importar en absoluto si sus atributos

18:47

internos cambian.

18:48

Por ejemplo, un cliente humano.

18:49

Un cliente puede cambiar de número de teléfono

18:52

móvil, puede mudarse de ciudad o incluso cambiar

18:54

su nombre legal, pero para el sistema sigue

18:56

siendo exactamente el mismo individuo único.

18:59

Se le rastrea por un ID.

19:01

Eso es rastreado mediante un número de identificación

19:04

inmutable.

19:05

Vale.

19:06

La entidad tiene una historia de vida.

19:08

Pero a ver, ¿qué pasa con aquellas cosas

19:10

que no tienen un ciclo de vida que

19:11

nos interese rastrear?

19:13

Si yo registro, por ejemplo, una dirección de

19:15

envío en ese perfil del cliente, a mí

19:18

no me importa la historia de la calle

19:20

ni que otros clientes viven allí.

19:22

Solo me importan los datos de esa dirección

19:24

en este momento concreto.

19:26

Exacto.

19:26

¿Cómo modelamos eso sin sobrecargar la memoria del

19:29

sistema con identidades inútiles?

19:31

Pues precisamente ahí es donde entran los objetos

19:34

de valor o value objects.

19:36

Son elementos que usamos puramente para describir las

19:39

características de algo, pero que carecen de una

19:42

identidad propia que debamos o queramos rastrear a

19:45

través del tiempo.

19:46

Solo atributos.

19:47

Simplemente nos importa la combinación de sus atributos,

19:50

sí.

19:50

Entonces, a ver, para asentar bien este concepto

19:52

que me parece crucial.

19:54

Si lo entiendo bien, una entidad es como

19:56

un billete de avión a mi nombre.

19:58

Me gusta.

19:58

Si de repente la aerolínea cambia la fecha

20:01

del vuelo o me reasignan la puerta de

20:03

embarque o incluso me cambian de asiento.

20:06

Sigo siendo yo el pasajero.

20:08

Ese billete en particular tiene mi identidad atada

20:11

a él y tiene un ciclo de vida

20:13

que la aerolínea debe seguir con lupa.

20:15

Sí, sí.

20:16

Pero un objeto de valor es como, no

20:18

sé, un billete de diez euros que llevo

20:20

en el bolsillo.

20:20

Me da absolutamente igual qué billete físico sea.

20:23

Totalmente.

20:24

No me importa ni su número de serie

20:25

ni en qué carteras ha estado antes.

20:28

Solo me importa su valor intrínseco.

20:30

Si yo te doy un billete de diez

20:31

euros para pagar algo y tú, por algún

20:34

motivo, me devuelves otro billete de diez euros,

20:36

totalmente distinto, estamos en paz.

20:38

Son 100 % intercambiables.

20:40

Esa analogía es perfecta.

20:42

Fíjate.

20:42

Y fíjate en el desastre que ocurre si

20:45

nos equivocamos con esa distinción del billete a

20:48

nivel técnico.

20:49

¿Qué pasaría?

20:49

Pues que no es solo un debate filosófico

20:52

para entretenernos.

20:53

Tiene unas consecuencias enormes en el rendimiento del

20:56

código.

20:57

Si tú obligas a tu sistema de software

20:59

a tratar a todos los billetes de diez

21:01

euros como entidades, estarías forzando a la base

21:05

de datos para generar un identificador único para

21:07

cada billete.

21:08

Uf, qué locura.

21:10

Rastreando su historia individual, sus cambios de estado

21:13

y su ciclo de vida por todos los

21:14

módulos del programa.

21:15

El servidor explota.

21:17

Es un desperdicio colosal de recursos de computación

21:20

y convierte el sistema en una maraña hipercompleja.

21:24

Tratarlo como un objeto de valor que se

21:26

puede crear y destruir a voluntad sin dejar

21:28

rastro, simplifica enormemente la arquitectura.

21:31

Mucho más ligero.

21:33

Muchísimo.

21:34

Y luego tenemos el tercer bloque, que son

21:36

los servicios.

21:37

A ver, estos representan acciones, procesos o transformaciones

21:42

que no tienen un estado propio que guardar

21:45

y que no encajan de forma natural, ni

21:48

en la definición de una entidad, ni en

21:50

la de un objeto de valor.

21:52

Piensa, por ejemplo, en una operación de transferencia

21:55

de fondos entre dos cuentas bancarias.

21:58

Forzar a la cuenta A a tener un

22:00

método que se llame, no sé, transferirse a

22:02

sí misma a la cuenta B resulta forzado

22:05

y poco natural para un banquero.

22:06

No hablan así, ¿no?

22:07

La transferencia es un proceso del dominio con

22:10

entidad propia, con sus propias reglas de seguridad

22:14

y de auditoría.

22:15

Así que se modela como un servicio explícito.

22:18

Entendido.

22:18

Y finalmente, bueno, para evitar que miles de

22:22

estas entidades, valores y servicios se conviertan en

22:25

un caos visual cuando el sistema crece a

22:27

escala empresarial, utilizamos los módulos.

22:30

Para ordenar.

22:31

Piensa en los módulos como los grandes capítulos

22:34

temáticos del libro.

22:35

Que cuentan la historia de tu sistema.

22:38

Agrupan conceptos que son altamente cohesivos entre sí,

22:42

separando de forma hermética el módulo de facturación

22:46

del módulo de envíos internacionales, por ejemplo.

22:48

Muy clarificador, la verdad.

22:50

Tenemos las piezas en el tablero.

22:52

Entidades, valores, servicios y módulos.

22:55

Eso es.

22:55

Pero claro, estas piezas no viven congeladas en

22:58

el tiempo.

22:58

Como decíamos con el billete de avión, estas

23:01

estructuras nacen, sufren cambios súper complejos por parte

23:04

de los usuarios.

23:05

Y bueno, eventualmente son archivadas o borradas.

23:08

Tienen un ciclo.

23:09

Gestionar cómo nacen y cómo se recuperan los

23:11

datos sin que la lógica de negocio se

23:13

llene de ese tódigo basura de bases de

23:15

datos, pues es un reto monumental, ¿no?

23:17

Lo es.

23:18

Y para gestionar ese ciclo de vida sin

23:20

corromper el modelo puro, el diseño introduce tres

23:23

patrones muy concretos.

23:25

Los arregados, las fábricas y los repositorios.

23:29

Vamos uno a uno.

23:30

Vale.

23:30

Un agregado o aggregate es la solución para

23:34

mantener la coherencia de los datos.

23:36

Piensa en un agregado como el bloque de

23:38

un motor de combustión.

23:39

Vale.

23:40

Tú no permites que un mecánico aficionado intente

23:42

ajustar el tiempo de los pistones internos empujándolos

23:45

directamente con la mano desde fuera, ¿verdad?

23:47

No, claro.

23:48

Romperías el motor.

23:49

Exacto.

23:50

Interactúas con el motor a través de una

23:52

interfaz controlada, pues el agregado agrupa múltiples objetos,

23:56

como por ejemplo un pedido y sus líneas

23:58

de pedido, y asegura que nadie modifique las

24:01

partes internas saltándose las reglas globales.

24:04

Las invariantes, que llaman.

24:05

Eso es.

24:06

Mantener las invariantes.

24:08

Por ejemplo, garantizando que el total del pedido

24:11

siempre coincida matemáticamente con la suma de sus

24:14

líneas.

24:15

Tiene sentido.

24:16

Y para ensamblar este motor complejo desde cero,

24:19

sin que el resto del programa tenga que

24:21

conocer los detalles sucios de fabricación, utilizamos el

24:24

patrón de fábricas, las factories.

24:26

Vale.

24:27

Y finalmente, el puente hacia el almacenamiento a

24:30

largo plazo son los repositorios.

24:32

Un momento, un momento.

24:34

Vamos a ser un poco escépticos aquí con

24:36

lo de los repositorios.

24:38

A ver.

24:39

Un repositorio no es simplemente una forma elegante,

24:41

abstracta y, francamente, un poco pedante de llamar

24:45

a una consulta SQL de toda la vida

24:47

a la base de datos.

24:48

Ya, latífica duda.

24:49

Es decir, haz un select y tráeme los

24:52

datos de la tabla clientes.

24:53

¿Por qué disfrazarlo con un nombre nuevo?

24:56

A ver, entiendo la provocación.

24:58

Pero para entender por qué no es una

24:59

simple consulta con un sombrero elegante, hay que

25:02

mirar el daño psicológico del cliente.

25:04

Fíjate, el daño psicológico que hace el SQL

25:06

directo en el código de negocio.

25:08

¿Psicológico?

25:09

Sí, sí.

25:10

Si tú haces una consulta SQL tradicional o

25:12

usas herramientas básicas de bases de datos, el

25:15

sistema te devuelve datos crudos, desmembrados.

25:18

Cierto.

25:19

Te devuelve filas, te devuelve columnas y tipos

25:22

primitivos.

25:23

Psicológicamente, eso empuja al desarrollador a dejar de

25:26

pensar en reglas de negocio y empezar a

25:28

pensar en cómo cruzar tablas relacionales.

25:30

Ah, claro.

25:31

Te cambia el marco mental.

25:33

Exactamente.

25:33

Exactamente.

25:33

Un repositorio, en cambio, te devuelve un objeto

25:36

del dominio rico, un agregado completamente formado y

25:40

listo para funcionar, con todos sus comportamientos matemáticos

25:43

intactos.

25:45

Ya montado.

25:45

El repositorio actúa como un ilusionista que oculta

25:48

por completo la infraestructura técnica.

25:50

Qué buena imagen.

25:52

El desarrollador que usa el repositorio de clientes

25:55

no sabe ni le debería importar en absoluto

25:58

si por debajo hay una base de datos

26:01

Oracle carísima, un simple archivo de texto o

26:04

un microservicio en la nube.

26:06

Él sigue pensando exclusivamente en términos del lenguaje

26:10

ubicuo.

26:11

O sea, la base de datos debe servir

26:13

a tus reglas de negocio, no al revés.

26:15

Eso es.

26:15

Si dejas que la base de datos dicte

26:17

cómo se escriben tus reglas, pues terminas con

26:20

un sistema súper rígido.

26:22

Y supongo que esto es lo que permite

26:23

alcanzar ese codiciado estado que el texto llama

26:26

diseño flexible, el Supple Design, ¿no?

26:29

Exacto.

26:30

Porque si aíslas todo lo técnico, culminas en

26:32

un código con interfaces que, bueno, revelan la

26:35

intención.

26:35

Al leer el código, estás leyendo exactamente qué

26:38

está haciendo la política del negocio, mientras el

26:41

cómo técnico está cuidadosamente escondido.

26:43

Cuando alcanzas ese nivel, es que un desarrollador

26:46

recién incorporado puede leer el código de la

26:49

capa de dominio casi como si estuviera leyendo

26:52

el manual de operaciones de la empresa.

26:54

Sin ruido.

26:54

Sin tropezar con detalles sobre conexiones a bases

26:58

de datos o bucles de red.

26:59

Todo fluye.

27:01

Pero claro.

27:02

Tenemos que aterrizar esto en la cruda realidad

27:04

económica de las empresas.

27:05

Aplicar absolutamente todas estas tácticas, este nivel de

27:08

pureza arquitectónica, pulir el lenguaje ubicuo con reuniones

27:12

interminables, destilar entidades, crear repositorios perfectos.

27:16

Es mucho trabajo.

27:17

Intentar aplicar esto a un sistema corporativo gigante

27:20

de arriba abajo es literalmente suicida.

27:22

Hay demasiadas piezas, demasiadas pantallas, procesos intrascendentes.

27:27

Si un equipo intenta modelar todo el universo

27:29

de la empresa con esta profundidad se hundirán

27:32

en tiempo y quemarán todo el presupuesto en

27:34

el primer año fijo.

27:35

Seguro.

27:36

Entiendo que aquí es donde entra la necesidad

27:38

de una estrategia un poco más despiadada, ¿no?

27:41

Y aquí entramos en el verdadero corazón estratégico

27:44

de esta filosofía.

27:45

Un concepto que Evans llama la destilación.

27:48

A ver.

27:49

El éxito rotundo o el fracaso estrepitoso de

27:52

un proyecto de software a gran escala depende

27:55

casi enteramente de la capacidad del equipo directivo

27:58

y técnico para identificar el core domain, el

28:02

principal.

28:02

¿Y qué es exactamente?

28:04

Esta es esa parte minúscula, pero altamente compleja

28:07

del software que realmente diferencia a la empresa

28:10

de sus competidores.

28:11

Es, digamos, la joya de la corona que

28:13

aporta un valor estratégico único.

28:15

Lo que da dinero.

28:17

Exacto.

28:18

Todo lo demás que compone el inmenso sistema

28:20

informático corporativo son subdominios genéricos.

28:24

Ah, vale.

28:25

Cosas como un organigrama de empleados, un sistema

28:28

de autenticación de usuarios mediante contraseñas, o no

28:32

sé, un módulo de contabilidad estándar.

28:35

Son infraestructuras que son absolutamente necesarias para que

28:38

la empresa funcione.

28:40

Sí, pero no son el núcleo de tu

28:42

modelo de negocio.

28:43

No te hacen ganar contra tu competencia.

28:45

Entonces, si lo aplicamos al mundo real.

28:47

A ver, si estamos construyendo el sistema central

28:50

para un gran hospital pionero, pues el core

28:53

domain serían sin duda esos algoritmos ultra complejos

28:57

de triaje predictivo de urgencias que salvan vidas.

29:02

Eso es el núcleo, sí.

29:04

En cambio, el módulo para gestionar, no sé,

29:07

las nóminas del personal de limpieza o del

29:09

servicio de cafetería sería un subdominio genérico.

29:13

Exactamente.

29:13

Lo ideal sería comprar un software de nóminas

29:16

ya hecho, o en el peor de los

29:18

casos, pues no poner a los tres mejores

29:20

y más caros arquitectos de software del hospital

29:22

a programar un gestor de nóminas desde cero,

29:25

¿verdad?

29:25

El ejemplo es perfecto.

29:27

Pero la realidad empírica en la industria del

29:29

software, y esto es algo sobre lo que

29:31

los médicos y los textos nos advierten de

29:33

forma muy severa y reiterada, es que debido

29:36

a dinámicas humanas un poco tóxicas, a menudo

29:38

ocurre exactamente lo contrario.

29:40

No me digas.

29:41

Sí, sí.

29:42

Los mejores desarrolladores de un equipo, los veteranos

29:45

que cobran más, muchas veces huyen del barro

29:47

del negocio y se van a jugar con

29:49

tecnologías de infraestructura.

29:51

Por ego.

29:51

Por puro ego técnico, sí, o para engordar

29:55

su currículum.

29:56

Les apasiona construir frameworks abstractos o trastear con

30:00

el último sistema de mensajería distribuida y dejan

30:03

la responsabilidad de programar el modelo crítico de

30:06

negocio en manos de los programadores junior que

30:08

acaban de llegar a la empresa.

30:10

A los que no se atreven a rechistar,

30:12

claro.

30:12

Exacto, a los novatos.

30:14

Pero es una negligencia tremenda si lo piensas.

30:17

O sea, es como poner al arquitecto estrella

30:19

que ha ganado premios internacionales a diseñar el

30:22

grosor de las tuberías de los baños.

30:23

Tal cual.

30:24

Y dejar que el becario recién graduado calcule

30:26

los cimientos y la estructura de carga del

30:28

rascacielos.

30:29

Es una tragedia silenciosa que, de verdad, destruye

30:33

empresas enteras.

30:34

El libro relata con mucha frustración un caso

30:37

real donde un desarrollador senior absolutamente brillante dedicó

30:41

varios meses de trabajo a construir un sistema

30:44

periférico para gestionar comentarios de usuarios.

30:47

Comentarios, madre mía.

30:49

Sí, es un trabajo precioso.

30:51

Una arquitectura súper flexible, genérica y técnicamente deslumbrante.

30:56

Pero.

30:56

Pero mientras él se divertía con eso, un

30:59

programador muy inexperto estaba a cargo del módulo

31:01

central de evaluación de préstamos de la entidad

31:04

financiera.

31:04

Ostras.

31:05

Que era el verdadero y único motor de

31:08

ingresos del negocio.

31:09

Claro, lo importante de verdad.

31:11

Pues ese programador inexperto convirtió la lógica de

31:14

préstamos en un enredo incomprensible, súper rígido y

31:17

lleno de errores.

31:18

La elección de la destilación aquí es brutal.

31:20

Todo el esfuerzo genial y los mejores cerebros

31:23

de la empresa deben ir dirigidos, sin contemplaciones

31:26

ni excusas, al core domain.

31:28

Ahí es donde te la juegas.

31:29

Ahí es donde te juegas.

31:30

Más la supervivencia y el éxito.

31:32

Pues es una bofetada de realidad tremenda para

31:35

la industria.

31:35

Y creo que este último punto nos ofrece

31:38

la plataforma perfecta para una reflexión final brillante,

31:41

sobre todo nuestro análisis a fondo de hoy.

31:44

Lo que verdaderamente nos demuestra la filosofía del

31:47

diseño guiado por el dominio es que la

31:49

ingeniería de software, cuando se practica en su

31:52

nivel más alto y profesional, pues no trata

31:54

realmente sobre ordenadores.

31:56

Para nada.

31:57

No va a describir ceros y unos más

31:59

rápido, ni de usar el lenguaje de programación

32:02

más novedoso.

32:03

Trata sobre enfrentarse y comprender profundamente la asombrosa

32:07

complejidad y, bueno, el desorden del conocimiento del

32:10

mundo real.

32:11

Del caos humano, sí.

32:12

Ya estemos hablando de sistemas inabarcables, de envíos

32:15

globales, de modelos de derivados financieros súper complejos

32:19

o del diseño físico de hardware electrónico, pues

32:23

el verdadero y más noble trabajo de un

32:24

creador de software es empaparse de ese caos

32:28

humano y destilarlo.

32:30

En ideas puras, comunicables, claras y útiles.

32:34

Es que es un cambio de paradigma total

32:36

para cualquier profesional de la tecnología.

32:38

El código fuente es solamente el medio de

32:41

expresión.

32:41

Digamos, es la tinta en el papel.

32:44

El fin último y genuino es la captura

32:46

y el modelado del conocimiento humano para, pues

32:49

eso, para resolver problemas reales.

32:52

Así que a quienes nos escuchan hoy, tanto

32:54

si sois desarrolladores como analistas o directores de

32:57

tecnología, os invitamos a hacer un pequeño pero

33:01

revelador ejercicio mañana cuando lleguéis al trabajo.

33:03

A ver si se atreven.

33:05

Sí.

33:05

Mirad el software que sostiene vuestras empresas.

33:08

Abrid una parte crítica del código fuente o

33:10

hablad diez minutos con el equipo de desarrollo

33:13

y hacéos en silencio esta simple y poderosa

33:16

pregunta.

33:17

¿Habla de verdad este código el rico idioma

33:19

de nuestro negocio y de nuestros expertos o

33:21

sólo está balbuceando el frío y genérico idioma

33:24

de las máquinas?

33:24

La honestidad de esa respuesta os dirá muchísimo

33:27

sobre el futuro a largo plazo de ese

33:28

proyecto.

33:29

Antes de despedirnos hasta el próximo programa, os

33:31

informamos de que las voces que oyeis han

33:33

sido generadas por la IA de Notebook LM

33:35

y que dirigiendo el podcast se encuentra Julio

33:37

Pablo Vázquez, un humano que te envía saludos.

33:39

En caso de error, probablemente sean errores humanos.

33:42

Nos escuchamos.

33:54

Y hasta aquí el episodio de hoy.

33:56

Muchas gracias por tu atención.

34:07

Esto es BIMPRAXIS.

34:09

Nos escuchamos en el próximo episodio.