Vertical Slices 101
Tags: cleancode, softwareengineering, architecture, softwaredevelopment
Published: 2024-04-04 06:09:46

---
title: Vertical Slices 101
published: true
date: 2024-02-25 10:02:08 UTC
tags: cleancode,softwareengineering,softwarearchitecture,softwaredevelopment
canonical_url: https://medium.com/all-you-need-is-clean-code/vertical-slices-101-e3cf9386a155
---

#### Clean Architectures

#### Todo lo que necesitas saber sobre Vertical Slices

![](https://cdn-images-1.medium.com/max/1024/1*ADcTTPffhMFBTBjfivlynw.png)
_Vertical Slices sobre el modelo tradicional de capas_

[**Artículo publicado originalmente en blog Secture&Code**](https://secture.com/blog/vertical-slices-101/)

### ¿De dónde viene el patrón Vertical Slices?

Tras haber hablado durante un tiempo de distintos modelos de [Clean Architectures](https://secture.com/blog/clean-architectures-arquitecturas-limpias/), me gustaría introducir un patrón que discute su eficacia, o al menos sus ventajas a corto/medio plazo.

El patrón _Vertical Slices_ fue creado por [Jimmy Bogard](https://www.jimmybogard.com/vertical-slice-architecture/) como una respuesta a las ya tradicionales arquitecturas limpias ([Hexagonal o Ports&Adapters](https://secture.com/blog/arquitectura-hexagonal-101/), [Onion](https://secture.com/blog/onion-architecture-101/), [Screaming](https://secture.com/blog/screaming-architecture/)…)

_Clean Architecture_ (siempre según Jimmy), te obliga a seguir una serie de reglas de dependencia que implican crear muchas abstracciones a cambio de muy poco beneficio, ya que el principal objetivo de _Clean Architecture_ es eliminar la dependencia de cualquier _framework_ o librería de terceros.

El beneficio real de estas abstracciones y reglas es difícilmente apreciable, ya que nunca se ha dado el caso de tener que cambiar de Framework o de base de datos (excepto quizá al ejecutar baterías de tests). Pero seguir reglas por seguirlas no va con Jimmy (ni con nadie, supongo), así que propuso su propio modelo de arquitectura.

### ¿Qué es el patrón Vertical Slices?

Con un patrón de _Clean Architecture_ hacemos una separación por capas, habitualmente _Infrastructure_ (adaptadores de librerías de terceros), _Application_ (lógica de negocio) y _Domain_ (abstracciones y contratos).

La propuesta de Jimmy pasa por, en lugar de dividir nuestro código en capas por cuestiones técnicas, dividirlo por funcionalidad. Cada funcionalidad será una _slice_ y agrupará todas estas capas. De este modo, cada funcionalidad es una caso de uso distinto con distintas necesidades que se abordarán de la forma mas adecuada.

Podría entenderse como un modulo independiente dentro del proyecto, que controla desde la _request_ hasta la _response_ de forma independiente (esto, inevitablemente nos lleva a pensar en [CQRS](https://secture.com/blog/command-query-responsibility-segregation-cqrs/)).

![](https://cdn-images-1.medium.com/max/581/1*es3HWrY3QytuXG0sj2H_tA.png)
_Esquema original de Vertical Slices Architecture. Créditos a Jimmy Bogard_

La esencia de _Vertical Slices Architecture_ radica en minimizar el acoplamiento entre _slices,_ maximizando a su vez el acoplamiento en cada _slice_ (ejes de cambio).

> When adding or changing a feature in an application, I’m typically touching many different “layers” in an application. I’m changing the user interface, adding fields to models, modifying validation, and so on. Instead of coupling across a layer, we couple vertically along a slice. **Minimize coupling between slices, and maximize coupling in a slice.**

Con este enfoque las capas compartidas desaparecen y las abstracciones se vuelven innecesarias, cada _slice_ implemente únicamente aquello que necesita, y cada _slice_ decide cómo manejar la _request_ que tiene asignada.

![](https://cdn-images-1.medium.com/max/917/1*1xrZZrq2i7Z8Mt20uW5kLQ.png)
_Créditos a Jimmy Bogard_

Los [_Domain Logic Patterns_](https://martinfowler.com/eaaCatalog/) de Martin Fowler ya no son una decisión que abarque todo el proyecto, sino que cada _slice_ se autogestiona y decide cuales usar y cuando hacerlo. Esto favorece empezar cualquier _slice_ de la forma más sencilla posible e ir refactorizando a patrones a medida que sea necesario, a su debido tiempo.

### Desventajas

El propio Jimmy Reconoce que este patrón no es para todos los equipos, ya que estos deben de tener cierta madureza y experiencia en detectar _code smells_ y en aplicar refactors siguiendo las clásicas técnicas del libro [Refactoring to Patterns de Joshua Kerievsky](https://amzn.to/3SMa0gW), moviendo lógica compleja a una capa de dominio compartido (siempre y cuando sea realmente necesario)

### Conclusión

Leer sobre un patrón que contradice una tendencia al alza como las _Clean Architectures_ siempre resulta sumamente interesante, ya que podemos reflexionar sobre lo que estamos haciendo y por qué lo estamos haciendo (seguimos reglas por seguirlas?).

No obstante, en mi opinión este patrón favorece la falta de coherencia entre las distintas funcionalidades de un proyecto, haciendo que tengas que aprender de nuevo en cada una que vayas a tocar cómo está diseñada o implementada.

Puede que sea un enfoque idóneo en proyectos muy grandes con equipos claramente definidos y con formas de trabajar o necesidades claramente distintas, algo así como aplicar microservicios a nivel monolítico, pero creo que en proyectos más pequeños o con una rotación frecuente entre quién va a trabajar en qué funcionalidad, contribuye más al caos.

Si que me parece un ejercicio interesante desde el punto de vista de que, al pasar por distintas funcionalidades con distintas implementaciones, podemos detectar qué patrones o técnicas están siendo provechosas en otras _slices_ y ver de incorporarlas a otras, eliminando así los patrones implementados solo porque han sido útiles en otra parte de la aplicación. No obstante, me parece un proceso largo que puede tener sentido trabajando en empresas de producto, pero poco favorable cuando trabajamos en proyectos más cortos.

### Referencias

- [Presentación de Vertical Slices Architecture](https://github.com/jbogard/presentations/tree/master/VerticalSliceArchitectures) (Jimmy Bogard)
- [Conferencia de Vertical Slices Architecture](https://www.youtube.com/watch?v=SUiWfhAhgQw)(Jimmy Bogard)
- [Artículo original de Vertical Slices Architecture](https://jimmybogard.com/vertical-slice-architecture/) (Jimmy Bogard)

* * *