Archyno
UMLPráctica del modelado

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.
Diagrama de componentes UML de un sistema de comercio electrónico. Storefront y Admin console dependen ambos de una interfaz IOrders que realiza el Order service. El Order service depende de una interfaz IPayment que realiza un adaptador de pasarela de pago, y de una interfaz IStock que realiza el Inventory service.
La vista que la mayoría de la gente quiere decir con "la arquitectura": cuatro servicios, tres contratos, y un adaptador entre la tienda y un proveedor de pagos del que no depende por su nombre.

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:

  1. ¿Cuáles son los sustantivos? Un diagrama de clases del dominio. Qué es un pedido, de qué se compone, sin qué no puede existir.
  2. ¿Quién puede llamar a quién? Un diagrama de componentes de los servicios y los contratos entre ellos.
  3. ¿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#

Diagrama de clases UML de un dominio de comercio electrónico. Customer realiza cero o más Order. Una Order está compuesta de una o más OrderLine y asociada con un Payment. Cada OrderLine se refiere a un Product. Payment está asociado con un Shipment.
Cinco clases y cuatro relaciones. El rombo relleno es toda la afirmación: una OrderLine no puede existir sin su Order y muere con ella, mientras que un Product sobrevive claramente al pedido que lo referenciaba.

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#

Diagrama de despliegue UML de un sistema de comercio electrónico. Un dispositivo con navegador se comunica por HTTPS con una CDN y un entorno de ejecución en el borde, que se comunica con un clúster de Kubernetes que contiene los artefactos de la tienda y del servicio de pedidos. El clúster alcanza un dispositivo PostgreSQL por TCP 5432 y la API de Stripe por HTTPS.
Dónde se ejecuta, y el único de los tres diagramas que cambia cuando cambias de plataforma. Los artefactos van dentro del nodo que los ejecuta; las rutas etiquetadas llevan el protocolo y el puerto.

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

  1. 01Tres diagramas, tres preguntas: los sustantivos, los contratos, las máquinas.
  2. 02Composición frente a asociación en Order, OrderLine y Product es toda la carga del modelo de dominio.
  3. 03Posee el contrato de pago y deja que un adaptador nombre al proveedor: eso es lo que hace presupuestable un cambio.
  4. 04Tapa cualquier componente: lo que quede debe especificar su sustituto.
  5. 05Deja búsqueda, correo y recomendaciones fuera del diagrama de compra; responden a otra pregunta.
  6. 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

Lecturas relacionadas

Todos los artículos