Arquitectura de e-commerce, modelada
Una tienda online, dibujada tres veces: el dominio con el que trata, los servicios de los que está hecha y las máquinas en las que corre. Tres diagramas, tres preguntas distintas y en ninguno nada que pertenezca a otro.
9 min de lecturaUML 2.5.132 de 35
La respuesta corta
- Tres diagramas cubren casi cualquier conversación: uno de clases para el dominio, uno de componentes para los contratos, uno de despliegue para las máquinas.
- Dibuja el contrato, no el proveedor. Una interfaz IPayment con un adaptador de Stripe dice que la tienda depende de la capacidad y no de la marca.
- Que el carrito sea un servicio aparte es una decisión, no un hecho. Uno que sobrevive entre dispositivos es estado con dueño y recibe un contrato.
- La base de datos es un nodo en el diagrama de despliegue y un adaptador en el de componentes. Nunca la misma caja en los dos.
01Tres diagramas, tres preguntas#
Una tienda es el ejemplo al que recurre todo el mundo, y la razón de que la mayoría de los diagramas de tienda sean inútiles es que intentan ser una sola imagen. El vocabulario, las fronteras de servicio y las máquinas son tres temas distintos, y un dibujo que los mezcla no responde a ninguno: es ese diagrama con una clase Order, un logo de Kubernetes y una cola en el mismo lienzo.
Separados por pregunta, cada uno se vuelve comprobable:
- ¿Cuáles son los sustantivos? Un diagrama de clases del dominio. Qué es un pedido, de qué se compone, sin qué no puede existir.
- ¿Quién puede llamar a quién? Un diagrama de componentes de los servicios y los contratos entre ellos.
- ¿Dónde se ejecuta? Un diagrama de despliegue de los nodos y los artefactos que hay en ellos.
Nada de esto es un diagrama de colas, uno de secuencia ni un listado de infraestructura como código, y es a propósito. Esos existen y son útiles; también son donde un conjunto de documentación se muere si los tres primeros no están bien.
021. El dominio#
Este es el diagrama que asienta el vocabulario, y el vocabulario es donde las tiendas se tuercen primero. ¿Es un "carrito" una Order que aún no se ha realizado, o una cosa distinta? ¿Guarda una OrderLine el precio en el momento de la compra, o lo lee del Product? La segunda pregunta la responde la figura - unitPrice vive en la línea - y ese único atributo es la diferencia entre una tienda cuyas facturas antiguas siguen siendo correctas tras un cambio de precios y otra cuyas facturas no lo son.
032. Los servicios#
La figura de la cabecera de este artículo. Dos clientes, un servicio de pedidos y dos contratos de los que depende: existencias y pago. Léelo tapando una caja: tapa el servicio de pedidos y lo que queda es IOrders, IStock e IPayment, que es exactamente la especificación que tendría que cumplir un sustituto.
El adaptador es la pieza que merece copiarse. IPaymentes un contrato que la tienda posee; el adaptador de Stripe lo realiza. Nada del servicio de pedidos nombra a un proveedor, así que "¿qué costaría cambiar a Adyen?" tiene una respuesta que puedes ver: una caja y lo que resulte que el adaptador haya dejado escapar. Dibujado al revés, con el servicio de pedidos dependiendo directamente de un componente de Stripe, la misma pregunta necesita una búsqueda en el código.
Lo que falta a propósito: el carrito, el índice de búsqueda, el motor de recomendaciones, el envío de correos. Todos son reales, y ninguno cambia la respuesta a "quién puede llamar a quién en la ruta de compra". Van a su propio diagrama, cuando alguien tenga una pregunta sobre ellos.
043. El despliegue#
Este es el diagrama que nadie dibuja hasta el primer incidente, y el que responde a preguntas que los otros dos no pueden: qué es alcanzable desde internet, qué habla con la base de datos, y dónde está la frontera con un tercero. La API de Stripe se dibuja como nodo externo precisamente porque no es tuya: la caja recuerda que su disponibilidad es una dependencia que no controlas.
Es además el único de los tres que se queda obsoleto un martes cualquiera. El modelo de dominio sobrevive intacto a un cambio de plataforma y la vista de componentes también; el diagrama de despliegue lo invalida una migración de clúster. Esa asimetría es una buena razón para tenerlo aparte en vez de plegar "corre en Kubernetes" dentro de las cajas de componentes.
En una línea cada uno
- 01Tres diagramas, tres preguntas: los sustantivos, los contratos, las máquinas.
- 02Composición frente a asociación en Order, OrderLine y Product es toda la carga del modelo de dominio.
- 03Posee el contrato de pago y deja que un adaptador nombre al proveedor: eso es lo que hace presupuestable un cambio.
- 04Tapa cualquier componente: lo que quede debe especificar su sustituto.
- 05Deja búsqueda, correo y recomendaciones fuera del diagrama de compra; responden a otra pregunta.
- 06Solo la vista de despliegue se queda obsoleta al cambiar de plataforma, y por eso es una imagen propia.
La notación que hay detrás del diagrama del medio, con cinco topologías más, está en los ejemplos de diagramas de componentes. Para producir un primer borrador de cualquiera de los tres a partir de una descripción en vez de a mano, mira generar UML con IA.
05Preguntas frecuentes#
¿Qué diagramas hacen falta para documentar un e-commerce?
Tres cubren casi cualquier conversación: un diagrama de clases para el vocabulario del dominio, uno de componentes para saber qué servicio puede llamar a qué contrato, y uno de despliegue para saber dónde corre todo. Un diagrama de secuencia solo para los uno o dos flujos realmente discutidos, casi siempre el pago y las devoluciones.
¿Cómo modelar la pasarela de pago sin atar el diagrama a un proveedor?
Dibuja el contrato, no el proveedor. Una interfaz IPayment con un adaptador de Stripe que la realiza dice que la tienda depende de la capacidad y no de la marca, que es más cierto y además es lo que quieres poder comprobar el día que alguien proponga cambiar de proveedor.
¿El carrito debe ser un servicio aparte?
En el diagrama es una decisión, no un hecho: dibújalo como funciona tu sistema de verdad. Un carrito que vive en la tienda es asunto del cliente y no necesita caja; uno que sobrevive entre dispositivos es estado con dueño, y recibe un componente con su contrato como todo lo demás.
¿Dónde va la base de datos en un diagrama de arquitectura?
En el diagrama de despliegue como nodo, y en el de componentes solo como el adaptador que tiene delante. Esa separación mantiene la vista de componentes centrada en los contratos de los que depende tu código, y deja qué versión de Postgres corre dónde al único diagrama que trata de máquinas.
En esta serie
- 01¿Qué es UML?
- 02Símbolos UML
- 03Elegir un diagrama
- 04Diagramas de clases
- 05Ejemplos de diagramas de clases
- 06Cómo dibujar un diagrama de clases
- 07Símbolos del diagrama de clases
- 08Diagramas de secuencia
- 09Ejemplos de diagramas de secuencia
- 10Cómo dibujar un diagrama de secuencia
- 11Diagramas de casos de uso
- 12Ejemplos de casos de uso
- 13Diagramas de actividad
- 14Ejemplos de actividad
- 15Diagramas de máquina de estados
- 16Ejemplos de máquina de estados
- 17Diagramas de componentes
- 18Ejemplos de componentes
- 19Dibujar un diagrama de componentes
- 20Símbolos de componentes
- 21Diagramas de despliegue
- 22Ejemplos de despliegue
- 23Diagramas de objetos
- 24Diagramas de paquetes
- 25Diagramas de estructura compuesta
- 26Diagramas de comunicación
- 27Secuencia vs comunicación
- 28Diagramas de tiempos
- 29Diagramas de visión general de interacción
- 30Diagramas de perfil
- 31UML con IA
- 32Ejemplo de e-commerce
- 33Ejemplo bancario
- 34Ejemplo de microservicios
- 35Ejemplo de AWS
Lecturas relacionadas
Diagramas de estructura
Diagramas de estructura
Diagramas de estructura
Diagramas de estructura
Práctica del modelado
Práctica del modelado