Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more

Clean Architecture y Vertical Slice Architecture responden a preguntas distintas, así que no compiten entre sí. Clean Architecture define límites y la dirección de las dependencias para que las reglas de negocio no dependan de la base de datos, del framework web ni de otros detalles de infraestructura. Vertical Slice Architecture organiza el código alrededor de una funcionalidad, de modo que los archivos que cambian juntos vivan juntos. El cansancio que describen muchos equipos suele venir de recorrer capas y proyectos para cambios pequeños cuando las fronteras no protegen nada relevante. Es un problema de ajuste entre estructura y necesidad, no un defecto que el patrón traiga siempre.

Dos preguntas distintas

Clean Architecture: qué depende de qué

Microsoft Learn presenta Clean Architecture como una familia de estilos emparentada con Hexagonal Architecture, Ports-and-Adapters y Onion Architecture. El núcleo de la aplicación contiene el modelo y la lógica de negocio. Las abstracciones para acceder a datos, archivos o redes viven en ese núcleo, y la infraestructura aporta las implementaciones. La interfaz de usuario depende de interfaces definidas dentro del núcleo, y la inyección de dependencias conecta las implementaciones en tiempo de ejecución.

Vertical Slice Architecture: qué está junto

Vertical Slice Architecture responde a otra pregunta: dónde está todo lo necesario para cambiar una funcionalidad. En lugar de agrupar el código en carpetas globales como Controllers, Views o ViewModels, los archivos de una feature quedan juntos. La guía de ASP.NET Core de la documentación de dotnet/docs describe, para APIs, que las carpetas pueden reemplazar a los controllers y contener endpoints y DTOs relacionados.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Por eso no son doctrinas excluyentes. Un slice puede llamar a reglas de dominio compartidas y apoyarse en abstracciones de infraestructura cuando estas protejan algo real.

Comparación en cinco ejes

Eje Clean Architecture Vertical Slice Architecture Pregunta para el equipo
Organización principal Capas o proyectos con responsabilidades separadas Features o casos de uso ¿Dónde busca el equipo cuando cambia una feature?
Frontera que protege El núcleo de negocio frente a detalles de infraestructura La coherencia de una capacidad funcional completa ¿Qué frontera reduce más fricción en este proyecto?
Dependencias Reglas explícitas hacia el núcleo y abstracciones definidas en él Se decide dentro de cada slice, respetando los límites que sí se necesiten ¿Qué reglas no deberían depender de EF Core, HTTP u otros detalles?
Coste estructural Más proyectos, contratos y composición que mantener Menos capas que navegar; a cambio, cierta duplicación si se comparte poco ¿Qué duplicación es más barata que una abstracción central prematura?
Pruebas El núcleo se puede probar aislado; la infraestructura necesita pruebas con sus dependencias externas Las pruebas por comportamiento de cada caso de uso encajan de forma natural; las fuentes no cuantifican una ventaja ¿Qué nivel de prueba protege mejor el caso de uso y el dominio?
Mejor encaje Dominios con reglas importantes, cambios de infraestructura previstos o límites de equipo claros Features que cambian de forma independiente y proyectos donde navegar por capas globales resulta costoso ¿Qué complejidad existe hoy, no cuál podría aparecer más adelante?

Las celdas sobre organización y aislamiento se basan en la documentación de Microsoft Learn y dotnet/docs. Las preguntas de la última columna son criterios de decisión, no resultados de un experimento comparativo.

De dónde viene el cansancio

El cansancio no es una métrica en las fuentes revisadas, pero sí se pueden identificar mecanismos concretos que lo producen:

  • Navegación. Cambiar una feature obliga a abrir Application, Domain, Infrastructure y Web. La documentación de dotnet/docs señala que la organización por tipo de archivo puede obligar a saltar entre carpetas para localizar lo relacionado con una misma funcionalidad.
  • Ceremonia. Interfaces, DTOs y mapeos que no protegen ninguna regla cuando el caso de uso es un CRUD directo.
  • Composición. Registrar servicios e implementaciones en varios puntos del arranque de la aplicación.
  • Coordinación en revisión. Un único caso de uso repartido entre varios archivos que hay que revisar, probar y mantener sincronizados.
  • Procesos separados. Microsoft Learn advierte que separar servicios o procesos añade complejidad. Clean Architecture no obliga a desplegar microservicios, pero algunos equipos la asocian con ellos.

Estos mecanismos son observables en el código. Las fuentes revisadas no contienen un estudio cuantitativo que compare cansancio, velocidad o productividad entre ambos estilos, así que cualquier experiencia personal debe leerse como contexto y no como estadística.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Un mismo cambio, dos recorridos

Supongamos la regla «un pedido solo se puede cancelar antes de enviarse». Los nombres de carpetas y clases siguientes son ilustrativos; el número de archivos depende de cada diseño concreto y no es una medida general.

Con organización en capas

  1. En Domain/Orders/Order.cs, añadir el método Cancel() que valide el estado del pedido.
  2. En UseCases/Orders/, crear o modificar el caso de uso de cancelación y, si hace falta, la interfaz del repositorio definida en el núcleo.
  3. En Infrastructure/, ajustar la implementación del repositorio si cambia la consulta.
  4. En Web/, modificar el controller o endpoint que invoca al caso de uso.
  5. Escribir una prueba unitaria del núcleo sin infraestructura y una prueba de integración del repositorio.

Con organización por slice

  1. En Features/Orders/CancelOrder/, agrupar el request, el handler, la validación, el endpoint y el test de comportamiento.
  2. Si la regla de estado es estable y se usa en otros lugares, mantenerla en el modelo de dominio; si solo la usa este caso de uso, dejarla dentro del slice.
  3. Ejecutar el test de comportamiento del slice.

La diferencia visible es el recorrido del cambio. La regla de negocio sigue existiendo en ambos casos, y en el enfoque por slice todavía hay que decidir dónde vive.

Cuándo las capas pagan su coste

Las fronteras de Clean Architecture compensan cuando el esfuerzo de separación protege algo que cambia o es costoso de equivocar:

  • Invariantes de negocio importantes que deben cumplirse independientemente de cómo se llegue a ellas.
  • Necesidad de probar el núcleo sin base de datos ni servidor web. Microsoft Learn lo expresa así: «Because the Application Core doesn’t depend on Infrastructure, it’s very easy to write automated unit tests for this layer». (Traducción propia: «Como el núcleo de la aplicación no depende de la infraestructura, es muy sencillo escribir pruebas unitarias automatizadas para esta capa».)
  • Varias implementaciones de infraestructura o un cambio de proveedor previsto.
  • Equipos con áreas de responsabilidad claramente separadas que necesitan contratos explícitos entre ellas.

Cuándo empezar por slices

Un enfoque por slice suele ser suficiente cuando el producto es pequeño, el dominio todavía no está claro y los cambios se concentran en funcionalidades concretas. Microsoft Learn ofrece un criterio útil para decidir: «If you can’t deliver independent feature slices of the application, separating it only adds complexity». (Traducción propia: «Si no puedes entregar slices de funcionalidad independientes de la aplicación, separarla solo añade complejidad».) Si cada cambio de negocio toca siempre las mismas capas, la separación por capas no está aislando nada que se pueda entregar por separado.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Plantillas de inicio en .NET

Ardalis documenta dos plantillas de inicio que reflejan esta diferencia:

Plantilla Estructura Indicación según Ardalis Evolución
clean-arch Core, UseCases, Infrastructure y Web Aplicaciones grandes o empresariales, mantenimiento prolongado, varios equipos y dominio complejo Ya es la estructura completa por capas
min-clean Proyecto único organizado por slices MVPs, aplicaciones pequeñas, iteración rápida y equipos pequeños Según la guía de Ardalis, puede migrarse a la plantilla completa al crecer

Las versiones, dependencias e instrucciones de instalación cambian con el tiempo; compruébalas en la página Getting Started de Ardalis antes de empezar. La documentación de Microsoft sobre feature folders en ASP.NET Core usa ejemplos de distintas épocas del framework, así que adapta el código a la versión de .NET que utilices y no copies fragmentos antiguos como si fueran la API actual.

Qué puede afirmarse y qué no

  • No existe, en las fuentes citadas, un estudio cuantitativo general sobre cansancio, velocidad de entrega o productividad comparando ambos estilos. Cualquier cifra que circule sobre ello debe verificarse en su origen.
  • El ejemplo práctico de Daniel Balcarek, publicado el 13 de enero de 2026, compara dos APIs pequeñas e idénticas construidas con .NET Minimal APIs, implementando una operación Delete en cada una. El autor anuncia que compara velocidad de implementación, facilidad de pruebas unitarias y adición de features, pero declara que es una ilustración práctica limitada, no un análisis exhaustivo de ventajas y desventajas. Sirve como modelo de cómo diseñar una comparación, no como prueba de superioridad de ninguno de los dos estilos.
  • Una comparación propia y reproducible debería usar el mismo caso de uso, el mismo comportamiento, las mismas pruebas y la misma persistencia en ambas estructuras, registrando los archivos tocados, los pasos de registro de dependencias y los cambios necesarios al añadir una nueva regla. Si la realizas, documenta el entorno y las versiones; este artículo no incluye resultados de esa prueba.

Un enfoque híbrido y evolutivo

En la práctica, la pregunta no es elegir una etiqueta, sino decidir qué frontera compra algo hoy. Un camino razonable es el siguiente:

  1. Organizar cada caso de uso como slice, con su endpoint, request, handler y validación juntos.
  2. Proteger con límites explícitos solo las reglas de dominio estables y costosas de equivocar.
  3. Mantener la infraestructura detrás de interfaces cuando haya una razón concreta: un proveedor distinto, pruebas que necesitan sustitución o una integración externa.
  4. Extraer código compartido cuando el patrón de cambio lo demuestre, no antes. Duplicar un poco suele salir más barato que una abstracción central prematura.
  5. Revisar la estructura cuando cambie el tamaño del equipo o aparezca una regla que cruce varios slices.

Diseñar para el problema actual, con límites donde protegen algo real, permite que la solución crezca cuando la evidencia del proyecto lo exija. Ninguna de las dos arquitecturas funciona como fórmula universal.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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.