En una Web API de .NET organizada con Vertical Slice Architecture, los tests de arquitectura pueden convertir algunas reglas de diseño en comprobaciones automáticas; SQLite in-memory permite probar handlers contra una base relacional creada para el test, y OpenAPI puede servir de puente hacia tipos y clientes de Angular generados. Ninguna de estas decisiones obliga a convertir la aplicación en un monolito modular o en microservicios: la evolución depende de cómo crezca el producto y de las necesidades de sus equipos.
Qué protegen los tests de arquitectura en una aplicación con slices
Vertical Slice Architecture organiza el código alrededor de casos de uso o funcionalidades, en lugar de agruparlo exclusivamente por capas técnicas. Esa organización puede hacer que cada slice sea más coherente, pero no impide por sí sola que alguien introduzca una dependencia entre funcionalidades. En un proyecto que sigue siendo una sola Web API, los tests de arquitectura pueden verificar convenciones elegidas por el equipo, como relaciones entre espacios de nombres o patrones de registro.
As an Amazon Associate I earn from qualifying purchases.
En la tercera y última entrega de su serie sobre VSA en .NET, Beto Ramirez propone seis reglas. Son decisiones del diseño que describe, no requisitos universales de VSA; conviene ajustarlas a las convenciones reales del proyecto.
Do these 3 things before closing this tab:
1Fix the driver behind crashes, sound loss and screen glitches2Clear out junk files and repair common Windows errors3Scan for outdated or missing drivers - takes under a minute- Impedir que un slice use los casos de uso de otro slice.
- Impedir que el espacio de nombres
Commondependa de casos de uso de slices. - Exigir que las clases de endpoints implementen la interfaz de registro de endpoints definida por la aplicación.
- Mantener los manejadores de eventos dentro de los slices de funcionalidades.
- Exigir nombres para contratos anidados, como
Request,ResponseoValidator, de acuerdo con la convención establecida. - Detectar manejadores que no siguen la convención de registro descrita por el autor.
Estas verificaciones pueden revelar dependencias no deseadas durante el desarrollo o en la integración continua. Su alcance depende de las reglas que se escriban: un test que inspecciona espacios de nombres y convenciones no demuestra automáticamente que el diseño sea correcto en todos los sentidos.
#1 Best Overall
- Read Before You Buy — No Video Output: These adapters support charging and USB 2.0 data transfer, but cannot transmit video signals. Except for standard USB webcams (which use USB data only), they are not compatible with HDMI/DisplayPort cables, video-capable USB-C hubs, or docking stations with video output.
- Convert USB-A Ports to USB-C: Designed to connect USB-C earphones, cables, flash drives, card readers, and other USB-C accessories to standard USB-A ports. Plug-and-play with no drivers or software required.
- Aluminum Alloy Housing: Built with a sturdy aluminum alloy shell that aids in heat dissipation and protects against daily wear and scratches. Designed to maintain a stable and secure connection.
- Compact & Travel-Friendly: The ultra-compact design allows the adapter to stay plugged into your device without blocking adjacent ports or adding bulk, reducing wear and tear on your original USB ports.
- 12-Month Warranty: Backed by a 12-month manufacturer warranty for peace of mind. Designed to meet strict quality control standards for reliable everyday performance.
Comprobar que las reglas realmente se activan
Una regla que nunca falla podría estar bien definida y no haber encontrado infracciones, o podría no estar comprobando lo que el equipo cree. El autor resume la precaución así: “Un test de arquitectura que nunca falla no protege nada.” Para verificar la cobertura, recomienda introducir deliberadamente una infracción y confirmar que el test correspondiente la detecta; después, se revierte ese cambio. Es una manera práctica de distinguir una regla ejecutada de una regla meramente declarada.
Cómo probar handlers con SQLite in-memory
Los ejemplos de la serie usan SQLite in-memory con Entity Framework Core para probar el acceso a datos de los handlers sin depender de un repositorio simulado. El helper de prueba abre una conexión SQLite en memoria, configura EF Core con UseSqlite, crea el esquema mediante EnsureCreated() y proporciona el contexto resultante al test del handler.
Rank #2
- 5-in-1 USB-C Hub: Experience comprehensive connectivity featuring a Power Delivery input, two USB-A 2.0 ports, a USB-A 3.0 port, and an HDMI port. (Note: The USB-C power delivery input port is only for connecting an external wall charger to power your laptop and cannot power peripheral devices.)
- 90W Pass-Through Charging: Achieve optimal charging with 90W pass-through power to your laptop, supported by a total input of 100W, with the hub reserving 10W for operational efficiency. (Note: Wall charger not included.)
- Quick Data Transfers: Accelerate your productivity with rapid data transfers using a high-speed 5Gbps USB 3.0 port and two 480Mbps USB 2.0 ports.
- 4K HDMI Display: Enhance your visual experience with a hub capable of delivering 4K resolution at 30Hz in both mirror and extend modes. Please note that this hub is compatible with MacBook (macOS 12 and newer), Windows 10 and 11, ChromeOS, and laptops equipped with DP Alt Mode and Power Delivery. Note: This device is not compatible with Linux.
- What You Get: Anker USB-C Hub (5-in-1, 4K HDMI), welcome guide, 18-month warranty, and our friendly customer service.
Esta alternativa ejecuta SQL relacional contra el esquema que se crea para la prueba. Por eso puede ejercitar aspectos de una base relacional que un repositorio simulado no ejecutaría: el test pasa por el proveedor de base de datos en vez de sustituirlo por una implementación falsa que devuelve los datos esperados.
Quick wins for a faster PC:
Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Clear out junk files and repair common Windows errorsFree Scan →Scan for outdated or missing drivers - takes under a minuteDriver Scan →Qué cubre y qué no cubre
- Cubre: el comportamiento del handler frente al esquema creado en la prueba y las operaciones que SQLite ejecuta en ese contexto.
- No demuestra por sí solo: que la aplicación se comporte igual con cualquier proveedor de producción. Diferencias de proveedor, configuración, esquema o funciones específicas de la base de datos pueden quedar fuera.
- Permite mantener dobles de prueba en otros límites: el ejemplo del autor simula el despachador de eventos, aunque use SQLite para la persistencia.
La elección depende de lo que se quiera verificar. Un repositorio simulado puede aislar un handler de la persistencia, pero no comprueba el comportamiento SQL. SQLite in-memory comprueba interacciones relacionales con su propio proveedor, mientras que una prueba contra el motor de producción puede ser necesaria cuando el comportamiento específico de ese motor sea relevante. La serie no aporta mediciones comparativas de velocidad ni demuestra equivalencia entre proveedores; esas propiedades no deben darse por supuestas.
Rank #3
- Sleek 7-in-1 USB-C Hub: Features an HDMI port, two USB-A 3.0 ports, and a USB-C data port, each providing 5Gbps transfer speeds. It also includes a USB-C PD input port for charging up to 100W and dual SD and TF card slots, all in a compact design.
- Flawless 4K@60Hz Video with HDMI: Delivers exceptional clarity and smoothness with its 4K@60Hz HDMI port, making it ideal for high-definition presentations and entertainment. (Note: Only the HDMI port supports video projection; the USB-C port is for data transfer only.)
- Double Up on Efficiency: The two USB-A 3.0 ports and a USB-C port support a fast 5Gbps data rate, significantly boosting your transfer speeds and improving productivity.
- Fast and Reliable 85W Charging: Offers high-capacity, speedy charging for laptops up to 85W, so you spend less time tethered to an outlet and more time being productive.
- What You Get: Anker USB-C Hub (7-in-1), welcome guide, 18-month warranty, and our friendly customer service.
Cómo conectar los contratos de la API con Angular
El flujo propuesto parte de OpenAPI: la API emite un documento de descripción y ng-openapi-gen genera tipos y clientes para Angular. El objetivo es reducir la duplicación manual de contratos entre backend y frontend. La generación no elimina la necesidad de mantener el esquema y el proceso de generación dentro del flujo de trabajo del proyecto.
El autor también describe personalizar los nombres de referencias del esquema para evitar colisiones cuando varios contratos anidados se llaman, por ejemplo, Request. En su planteamiento, los nombres explícitos de endpoints y los resultados tipados forman parte de la manera de exponer la API para que el esquema generado sea útil.
Rank #4
- Dual Converters, Infinite Potential:Includes 2× USB C male to USB A female adapters and 2× USB A male to USB C female adapters. Perfect for a wide range of uses—tablets with Bluetooth keyboards, expand USB ports on macbook, and more. Two different converters for all your daily needs
- Next-Level 10Gbps & 3A Charging: No more slow 480Mbps, this usb to usb c adapter has a transfer speed of up to 10Gbps, allowing you to do more transferring in less time. This usb adapter fits both USB A and USB C charger, supporting up to 3A fast charging
- Upgraded Exquisite Craftsmanship: With an aluminum alloy housing and metal connector, the usbc to usb adapter is extremely durable and sturdy. Rigorously tested to withstand more than 10,000 times of plugging and unplugging, ensuring long-lasting performance
- Broad Compatible: The usb c to usb adapter widely supports all USB C/ USB A devices like laptops, tablets, cellphones, car chargers, and phone chargers. Such as compatible with MacBook Pro/Air 2023/2022, Thunderbolt 4/3 Devices,Apple MagSafe Watch 9/8/7/SE/Ultra, iPad Pro 2022/2021, Samsung Galaxy S23/S20/S10, and iPhone 17/16/15 Pro. Plug and play
- Please Note: To reach 10Gbps speed, keep the cable under 3.3 ft. For USB A Male to USB C adapters, try flipping the USB C connector. USB C Male to USB A adapters support bidirectional 10Gbps transfer within 3.3 ft
Los nombres de opciones y los detalles de configuración dependen de las versiones de .NET, del framework de endpoints y de las herramientas de generación utilizadas. La propuesta describe un enfoque, no una receta cuya compatibilidad con versiones actuales quede garantizada: antes de copiar configuraciones, comprueba las versiones concretas del proyecto y que el documento OpenAPI generado contenga los nombres y esquemas que espera el cliente Angular.
Free tools Windows power users keep installed
One-click scans. No signup required.
Qué camino seguir cuando aumentan las funcionalidades
Para una aplicación que crece, Ramirez plantea una secuencia posible: empezar con slices en un único proyecto Web API, extraer una funcionalidad que esté creciendo como módulo, evolucionar hacia un monolito modular con mensajería asíncrona resiliente cuando haga falta y considerar un microservicio si la escala o la independencia de despliegue lo justifican. Es una propuesta condicional del autor, no una progresión obligatoria para todos los equipos ni una promesa de extracción sin refactorización.
Best Value
- 5-in-1 Connectivity: Equipped with a 4K HDMI port, a 5 Gbps USB-C data port, two 5 Gbps USB-A ports, and a USB C 100W PD-IN port. Note: The USB C 100W PD-IN port supports only charging and does not support data transfer devices such as headphones or speakers.
- Powerful Pass-Through Charging: Supports up to 85W pass-through charging so you can power up your laptop while you use the hub. Note: Pass-through charging requires a charger (not included). Note: To achieve full power for iPad, we recommend using a 45W wall charger.
- Transfer Files in Seconds: Move files to and from your laptop at speeds of up to 5 Gbps via the USB-C and USB-A data ports. Note: The USB C 5Gbps Data port does not support video output.
- HD Display: Connect to the HDMI port to stream or mirror content to an external monitor in resolutions of up to 4K@30Hz. Note: The USB-C ports do not support video output.
- What You Get: Anker 332 USB-C Hub (5-in-1), welcome guide, our worry-free 18-month warranty, and friendly customer service.
| Etapa propuesta | Qué cambia | Cuándo puede tener sentido |
|---|---|---|
| Web API con slices | Las funcionalidades se organizan como slices dentro de una sola aplicación. | Cuando conviene mantener un despliegue único y hacer explícitas las fronteras entre casos de uso. |
| Extracción de una funcionalidad a un módulo | Una funcionalidad en crecimiento pasa a tener una frontera modular más clara. | Cuando la cohesión y la propiedad de esa funcionalidad justifican aislarla mejor dentro del sistema. |
| Monolito modular con mensajería asíncrona resiliente | Se refuerzan las fronteras entre módulos y se incorpora mensajería asíncrona donde sea necesaria. | Cuando la comunicación asíncrona y su fiabilidad responden a requisitos concretos. |
| Microservicio | Una parte del sistema pasa a desplegarse y escalarse de forma independiente. | Cuando la independencia de despliegue o las necesidades de escalado justifican asumir esa complejidad operativa. |
La decisión no depende del número de slices por sí solo. Resulta más útil observar quién es responsable de cada funcionalidad, cuán cohesionados están sus cambios, si hace falta escalarla o desplegarla independientemente y qué coste operativo tendría separar su ejecución. Introducir mensajería asíncrona también implica atender su fiabilidad; no es un paso automático por el mero hecho de dividir el código en módulos.
Cómo combinar las tres decisiones
Las pruebas de arquitectura, las pruebas con SQLite y la generación de contratos cumplen funciones distintas. Las primeras vigilan convenciones internas; las segundas ejercitan handlers con una base relacional; OpenAPI ayuda a compartir contratos con el frontend. Ninguna sustituye a las otras, y ninguna determina por sí sola cuándo dividir una aplicación.
Quick Recap
- Define las dependencias permitidas entre slices y expresa las convenciones que realmente quieras hacer cumplir.
- Comprueba las reglas de arquitectura con infracciones intencionales durante el desarrollo.
- Elige el proveedor de base de datos de las pruebas según el comportamiento que necesitas verificar y conserva dobles solo en límites que quieras aislar.
- Genera los tipos de Angular desde el esquema OpenAPI del proyecto y revisa colisiones de nombres y compatibilidad de versiones.
- Considera módulos o servicios cuando la cohesión, la propiedad, el despliegue o el escalado den una razón concreta para cambiar la estructura.
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

