<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Arquitectura on Patrones — Exeal</title><link>https://patterns.exeal.com/tags/arquitectura/</link><description>Recent content in Arquitectura on Patrones — Exeal</description><generator>Hugo</generator><language>es-ES</language><lastBuildDate>Thu, 24 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://patterns.exeal.com/tags/arquitectura/index.xml" rel="self" type="application/rss+xml"/><item><title>Arquitectura en capas para frontend React</title><link>https://patterns.exeal.com/patterns/arquitectura-en-capas-para-frontend-react/</link><pubDate>Thu, 24 Sep 2026 00:00:00 +0000</pubDate><guid>https://patterns.exeal.com/patterns/arquitectura-en-capas-para-frontend-react/</guid><description>&lt;h2 id="problema"&gt;Problema&lt;/h2&gt;&#10;&lt;p&gt;En una SPA React sin fronteras internas, todo tiende a mezclarse dentro del componente que renderiza la pantalla: la llamada a la API, el estado de carga/error, la lógica de negocio (qué pedir, cómo combinar resultados, cuándo revalidar) y el JSX que lo pinta. El resultado es un componente que solo se puede testear montándolo entero — con mocks de &lt;code&gt;fetch&lt;/code&gt;, de router, de lo que haga falta — y donde no hay forma de reutilizar la lógica en otro sitio ni de darle una historia de Storybook sin resolver antes media aplicación.&lt;/p&gt;</description></item><item><title>Arquitectura hexagonal (puertos y adaptadores) en .NET</title><link>https://patterns.exeal.com/patterns/arquitectura-hexagonal-puertos-y-adaptadores/</link><pubDate>Thu, 24 Sep 2026 00:00:00 +0000</pubDate><guid>https://patterns.exeal.com/patterns/arquitectura-hexagonal-puertos-y-adaptadores/</guid><description>&lt;h2 id="problema"&gt;Problema&lt;/h2&gt;&#10;&lt;p&gt;Cuando la lógica de aplicación y la infraestructura (base de datos, storage, proveedores externos) conviven en el mismo proyecto, es fácil que un caso de uso acabe llamando directamente a un &lt;code&gt;DbContext&lt;/code&gt;, un cliente HTTP o &lt;code&gt;HttpContext&lt;/code&gt;. El código compila, funciona, pero deja de ser unit-testable: cualquier test de un caso de uso arrastra un contenedor de base de datos o un mock del framework web. Con el tiempo esto también acopla el dominio a decisiones de infraestructura que deberían poder cambiar solas — cambiar de ORM, servir el mismo core desde dos hosts distintos (uno con infraestructura real y otro en memoria para tests de frontend), o simplemente entender qué necesita realmente un caso de uso del mundo exterior.&lt;/p&gt;</description></item><item><title>DSM Snapshot: matriz de dependencias entre módulos versionada</title><link>https://patterns.exeal.com/patterns/dsm-snapshot/</link><pubDate>Thu, 24 Sep 2026 00:00:00 +0000</pubDate><guid>https://patterns.exeal.com/patterns/dsm-snapshot/</guid><description>&lt;h2 id="problema"&gt;Problema&lt;/h2&gt;&#10;&lt;p&gt;En cualquier arquitectura modular (features, bounded contexts, capas) el acoplamiento interno se degrada con el tiempo sin que nadie lo note. Un import &amp;ldquo;de conveniencia&amp;rdquo; cruza una frontera que el diagrama de arquitectura dice que no debería cruzarse, o convierte una dependencia unidireccional en un ciclo. Nada lo impide técnicamente — el compilador no sabe que &amp;ldquo;Feed no debería depender de Chat&amp;rdquo; — así que solo lo frena la memoria y la disciplina del equipo, que no escalan. El resultado se descubre meses después, en una auditoría o cuando alguien intenta extraer un módulo y se encuentra un grafo de dependencias mucho más enredado de lo que el diagrama sugería.&lt;/p&gt;</description></item><item><title>Host fino y módulos deep</title><link>https://patterns.exeal.com/patterns/host-fino-y-modulos-deep/</link><pubDate>Thu, 24 Sep 2026 00:00:00 +0000</pubDate><guid>https://patterns.exeal.com/patterns/host-fino-y-modulos-deep/</guid><description>&lt;h2 id="problema"&gt;Problema&lt;/h2&gt;&#10;&lt;p&gt;A medida que una aplicación crece, es fácil que todo acabe en un único proyecto (o en una pila de proyectos sin fronteras reales) donde cualquier clase puede llamar a cualquier otra. El resultado son dos problemas que se retroalimentan:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;No se puede razonar ni testear una pieza en aislamiento.&lt;/strong&gt; Para validar la lógica de un caso de uso hace falta levantar medio sistema, porque nada impide que esa lógica dependa de detalles internos de otra parte de la aplicación.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Una IA (o una persona nueva) que trabaja sobre una funcionalidad concreta necesita cargar contexto de todo el sistema&lt;/strong&gt; para saber qué es seguro tocar y qué no, porque la superficie pública y la implementación interna son indistinguibles a simple vista.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Esto se agrava en aplicaciones con piezas muy distintas entre sí: un listener de webhooks, una API administrativa, lógica de negocio con jobs en background. Cada una tiene su propia complejidad interna, pero todas acaban compartiendo el mismo espacio de nombres sin fronteras que el compilador conozca.&lt;/p&gt;</description></item><item><title>Monorepo multi-app con pipeline independiente por app</title><link>https://patterns.exeal.com/patterns/monorepo-multi-app/</link><pubDate>Thu, 24 Sep 2026 00:00:00 +0000</pubDate><guid>https://patterns.exeal.com/patterns/monorepo-multi-app/</guid><description>&lt;h2 id="problema"&gt;Problema&lt;/h2&gt;&#10;&lt;p&gt;Un producto real rara vez es una sola aplicación: suele ser un frontend, un backend, un panel de administración y, según el caso, algún componente de apoyo (un storage, un proxy de imágenes, un worker de background). Cuando cada uno vive en su propio repositorio, cualquier cambio que cruce esa frontera — un endpoint nuevo que el frontend necesita, un contrato que cambia entre backend y admin — deja de ser un commit y pasa a ser una coordinación entre varios repos: hay que abrir varios PRs, decidir el orden de merge y de deploy, y confiar en que nadie despliegue a medias. El riesgo de integración no desaparece, solo se difiere al momento del deploy.&lt;/p&gt;</description></item></channel></rss>