Saltearse al contenido

Arquitectura hexagonal

Vertical slicing

[WIP]

Teniendo todo esto en cuenta, nuestra arquitectura de carpetas en un proyecto de frontend (en este caso usando React como biblioteca de UI) quedaría de la siguiente forma:

  • Directorysrc
    • Directorymodules
      • Directoryproducts
        • Directorydomain
          • Product.ts
        • Directoryapplication
          • get-product.ts
        • Directoryinfrastructure
          • product-rest-client.ts
        • Directoryrepresentation
          • ProductCard.tsx
          • ProductPriceLabel.tsx
      • Directorycategories
        • Directorydomain
          • Category.ts
        • Directoryapplication
          • get-all-categories.ts
          • get-category.ts
        • Directoryinfrastructure
          • categories-rest-client.ts
        • Directoryrepresentation
          • CategoryGrid.tsx
          • CategoryFilters.tsx
    • Directorypages
      • ProductPage.tsx
      • CategoryPage.tsx
  • package.json

Aunque está representado usando la jerarquía de un poryecto típico de React, se puede ajustar para llevar a cualquier otro framework o librería de UI.

Dominio

Más información en el artículo sobre Domain Driven Design.

Aplicación

Infrastructura

Representación

En multitud de ocasiones se me ha ocurrido introducir la carpeta de presentación dentro de la infrastructura. Al final, se trata de código generalmente acoplado a un framework o a una librería de UI, por lo que se escapa del dominio puro de la aplicación. Siguiendo el concepto de dominio, nos gustaría ser capaces de poder desacoplar la lógica de negocio que tengamos en el frontal de la forma en la que esta se representa en la pantalla. Sin embarbo, en el caso de las aplicaciones web, la capa de representación tiene un peso demasiado importante como para no estar separada del resto.