Cómo dibujar un diagrama de componentes
Seis pasos desde un lienzo vacío hasta un diagrama que se puede entregar a un equipo, sobre un sistema pequeño. El orden importa más que la notación: las piezas, luego las promesas, luego las necesidades y al final las comprobaciones que detectan una frontera mal puesta antes de que alguien construya sobre ella.
8 min de lecturaUML 2.5.119 de 35
La respuesta corta
- Lista las piezas que podrían comprarse o reemplazarse en vez de construirse, y párate en nueve. Esa pregunta elige las cajas, no la estructura de carpetas.
- Primero los componentes, como cajas sin flechas. Nombra los contratos después, cuando ya sabes qué pieza queda a cada lado.
- Con el detalle justo para que alguien construya el reemplazo de cualquier caja a partir de lo que la rodea. Las firmas de métodos van en el código, no aquí.
- Terminado cuando cada componente lleva una interfaz, ninguna flecha apunta a un componente en vez de a un contrato, y tapar cualquier caja aún permite especificar su reemplazo.
01Paso 1. Enumera lo que podría reemplazarse#
Antes de dibujar nada, escribe una lista. No de tus módulos ni de tus carpetas: de las partes del sistema que podrían cambiarse de forma plausible por otra implementación, compradas en vez de construidas, reescritas por otro equipo u operadas por alguien más.
Esa pregunta es todo el filtro. Una carpeta no es un componente y una clase tampoco; una cosa con una frontera que podrías entregar a un proveedor, sí. El sistema de informes de este artículo dio cuatro: un panel, un planificador que ejecuta informes por la noche, el propio servicio de informes y un adaptador que habla con el almacén de datos.
02Paso 2. Dibuja las cajas, y ninguna flecha#
Coloca las piezas y resiste la tentación de conectarlas. Dibujar flechas ahora significa trazarlas entre componentes, y una línea del Dashboard directamente al servicio de informes solo dice «estos dos están implicados de algún modo», que es justamente la vaguedad que un diagrama de componentes existe para eliminar.
La disposición vale treinta segundos aquí: consumidores a un lado y proveedores al otro. Todos los diagramas de esta serie están dibujados de izquierda a derecha, con las dependencias fluyendo en un solo sentido, porque así el lector comprueba la dirección de un vistazo en vez de siguiendo cada línea.
03Paso 3. Nombra lo que provee cada parte#
Para cada caja, pregunta en qué puede apoyarse alguien de fuera, y nómbralo. Aquí IReports e IWarehouse: un contrato por capacidad, no uno por consumidor. Únelo con una realización: línea discontinua, triángulo hueco, apuntando a la interfaz.
En este paso ocurre el diseño de verdad, y es el paso que la gente se salta. Nombrar un contrato te obliga a decidir qué es público, y la discusión que sigue - «¿la exportación a CSV forma parte de IReports o no?» - es la discusión que conviene tener antes de que dos equipos la respondan de forma distinta en el código.
04Paso 4. Añade lo que requiere cada parte#
Ahora la segunda mitad, la que lleva la información: ¿qué contratos necesita cada componente? Dibuja una dependencia - línea discontinua, punta abierta - desde el componente hacia la interfaz que requiere. El resultado es el diagrama del principio de este artículo.
En cuanto esas flechas aterrizan se hacen visibles dos cosas. El panel y el planificador apuntan ambos a IReports, así que cambiarlo es ahora visiblemente un cambio para dos consumidores. Y el servicio de informes apunta a IWarehouse y no al adaptador, así que el adaptador es reemplazable sin que el servicio se entere, lo cual es o bien lo que pretendías o bien un descubrimiento que conviene hacer ahora.
05Paso 5. Pasa cuatro comprobaciones#
Un diagrama de componentes está terminado cuando las sobrevive. Llevan un minuto y cada una ha cazado un problema real más veces de las que ha pasado limpia.
- Tapa una caja con la mano. Lo que queda - las interfaces que estaban unidas a ella - es la especificación de su reemplazo. Si ese reemplazo necesitara saber algo que no está en pantalla, la frontera está en el sitio equivocado.
- Sigue las flechas buscando un ciclo. Dos componentes que se requieren mutuamente no se pueden desplegar, probar ni reemplazar de forma independiente. Mira el último de los ejemplos resueltos para ver cómo se ve y cómo se rompe.
- Comprueba que cada componente tiene al menos una interfaz. Una caja sin nada unido o no es un componente o no es relevante para este diagrama.
- Lee los nombres de las interfaces en voz alta. Si alguno está nombrado por su proveedor actual en vez de por su capacidad -
IMainframeBillingen lugar deIBilling- el contrato lleva al proveedor incrustado, y el cambio que el diagrama promete no será tan limpio como parece.
06Paso 6. Borra lo que pertenece a otro diagrama#
Úsalo cuando
- Interfaces, y qué componente está a cada lado de cada una
- Estereotipos que cambian cómo se adquiere una parte: «subsystem», «service», «library»
- Puertos, cuando un componente tiene de verdad dos superficies separadas
- Una nota en cualquier frontera discutida, diciendo quién la decidió
Usa otra cosa cuando
- Servidores, regiones, contenedores y procesos: diagrama de despliegue
- Clases, atributos y métodos dentro de un componente: diagrama de clases
- El orden de las llamadas entre componentes: diagrama de secuencia
- Tablas y columnas de base de datos: diagrama entidad-relación
La columna derecha no es pedantería sobre tipos de diagrama. Cada elemento agranda la imagen sin responder la pregunta para la que se dibujó el diagrama, y cada uno le da una segunda razón para quedar obsoleto: un diagrama de componentes sobrevive intacto a un cambio de plataforma, y el mismo dibujo con dos regiones de AWS encima no.
En una línea cada uno
- 01Enumera lo que podría reemplazarse. Esa lista, no el árbol de carpetas, es tu lista de componentes.
- 02Primero las cajas, ninguna flecha: una línea entre dos componentes no afirma nada comprobable.
- 03Nombra los contratos provistos antes que los requeridos; ahí están las decisiones de diseño.
- 04Las interfaces requeridas llevan la información de dependencias y son la mitad que la gente omite.
- 05Tapa cualquier caja: lo que quede debe especificar por completo su reemplazo.
- 06Todo lo relativo a máquinas, clases u orden de llamadas pertenece a otro diagrama.
Con el dibujo hecho, la referencia de cada marca que aparece en él está en símbolos del diagrama de componentes, y el argumento más amplio sobre cuándo merece la pena este tipo de diagrama está en la guía del diagrama de componentes.
07Preguntas frecuentes#
¿Por dónde se empieza un diagrama de componentes?
Empieza listando las partes del sistema que podrían reemplazarse o comprarse en vez de construirse, y detén la lista en nueve. Esa pregunta, y no la estructura de carpetas, decide qué cajas entran en el diagrama, y responderla primero es lo que evita acabar con un dibujo del repositorio.
¿Qué va primero, los componentes o las interfaces?
Primero los componentes, pero solo como cajas sin flechas. Nombrar los contratos es la parte difícil, y hacerlo después permite nombrarlos sabiendo qué piezas quedan a cada lado, en lugar de inventar una interfaz y luego buscar algo que poner detrás.
¿Cuánto detalle debe tener un diagrama de componentes?
El suficiente para que alguien pueda construir el reemplazo de cualquier caja a partir de lo que la rodea, y nada más. Las operaciones y los parámetros van en la definición de la interfaz o en el código: un diagrama que lista firmas de métodos queda obsoleto a la semana.
¿Cómo sé que un diagrama de componentes está terminado?
Cuando cada componente tiene al menos una interfaz conectada, ninguna flecha apunta a un componente en vez de a un contrato, y tapar cualquier caja con la mano deja aún lo necesario para especificar su reemplazo. Si se cumplen las tres, el diagrama afirma algo comprobable y puedes parar.
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
Referencia de notación
Diagramas de estructura
Diagramas de estructura
Diagramas de estructura