La ontología de TCA
El mapa mental de The Composable Architecture: State, Action, Reducer, Effect y Store; composición, dependencias, navegación como dato y testing exhaustivo.
The Composable Architecture es la respuesta de Point-Free a una pregunta incómoda: ¿por qué las apps de SwiftUI, tan elegantes en las demos, se vuelven inmanejables cuando crecen? Su apuesta es radical: todo el estado en un valor, todos los eventos en un enum, toda la lógica en una función pura, y todos los efectos como datos que un runtime ejecuta. A cambio de esa disciplina obtienes algo que casi ninguna arquitectura de UI ofrece: la capacidad de testear tu aplicación entera, incluida la asincronía, de forma determinista. Este mapa te da la visión aérea antes de recorrerla.
- Ver el mapa mental completo de The Composable Architecture.
- Entender las cinco piezas y cómo encajan en un ciclo cerrado.
- Situar la composición, las dependencias, la navegación y el testing.
- Empezar con el modelo mental correcto (que no es el de MVVM).
El territorio, de un vistazo
mindmap
root((TCA))
Las piezas
State
Action
Reducer
Effect
Store
Lenguaje
Value types
Macros
ObservableState
Composicion
Scope
forEach
ifLet e ifCaseLet
Modulos SPM
Dependencias
Dependency
DependencyKey
live test preview
Navegacion
Estado como dato
Presents
StackState
Testing
TestStore
Exhaustividad
Relojes controladosLas ideas clave
El estado es un valor
Todo el estado de una feature vive en una struct. No hay referencias compartidas ni mutaciones invisibles: si algo cambió, cambió porque una acción lo pidió y el reducer lo escribió.
Los eventos son datos
Cada cosa que puede pasar —un toque, una respuesta de red, el tic de un reloj— es un caso de un enum. El compilador te obliga a considerarlos todos.
Los efectos son valores devueltos
El reducer no hace la petición de red: devuelve un Effect que la describe. La función sigue siendo pura, y el runtime se encarga de ejecutarla. Es la idea de Elm, en Swift.
El testing es exhaustivo
El TestStore falla si el estado cambia de una forma que no declaraste, o si queda un efecto sin consumir. No es un test que pasa por casualidad: es una demostración.
Por qué importa
El nombre no es decorativo: la palabra clave de The Composable Architecture es composable. La mayoría de arquitecturas te dicen cómo estructurar una pantalla; TCA te da un álgebra para combinar pantallas. Un reducer que gestiona una lista de tareas y otro que gestiona el detalle de una tarea se combinan con Scope y forEach en un reducer padre, y esa combinación es de nuevo un reducer, componible a su vez. El resultado es que una app de cincuenta pantallas no es cincuenta arquitecturas conviviendo, sino una sola estructura anidada cuyos trozos puedes montar, desmontar y testear por separado. Esa propiedad —que el todo tenga la misma forma que las partes— es lo que hace posibles las otras dos promesas de TCA. Puedes testear exhaustivamente porque cada trozo es una función pura de estado y acción. Y puedes modelar la navegación como datos porque “estar en la pantalla de detalle” no es un efecto imperativo sino un valor dentro del estado del padre. El precio es real y conviene decirlo pronto: TCA es ceremoniosa, te obliga a nombrar cada evento y a declarar cada dependencia, y tiene una curva de aprendizaje que espanta a mucha gente. Pero quien la paga descubre que ha cambiado bugs difusos de estado por errores de compilación, y pruebas frágiles por demostraciones deterministas. Ese es el trato.
El camino
- Niveles 1–3 · Fundamentos — el modelo, los reducers y efectos, y una primera visión de composición y testing.
- Niveles 4–10 · El núcleo — Swift y las macros,
@Reducer,@ObservableState, modelar State y Action, el body y los efectos. - Niveles 11–14 · Efectos y dependencias — cancelación,
@Dependency,DependencyKeyy los valores live/test/preview. - Niveles 15–21 · Composición y navegación —
Scope, colecciones, opcionales, la navegación como dato,@Presents,StackStatey bindings. - Niveles 22–24 · Testing —
TestStore, relojes controlados, y el testing no exhaustivo y de integración. - Niveles 25–31 · Escala y maestría —
@Shared, persistencia, módulos SPM, UIKit, rendimiento, migración, comparación honesta y síntesis.
- Estudia el mapa mental y localiza las cinco piezas; intenta explicar en una frase el papel de cada una.
- Piensa en una pantalla que hayas escrito con
@Statey@Observable: ¿dónde vive hoy su estado y cuántos sitios pueden mutarlo? - Anota qué parte de esa pantalla podrías testear hoy sin abrir el simulador. Esa es la brecha que TCA quiere cerrar.
- Comprométete con la mentalidad: el estado es un valor, los eventos son datos, y los efectos también.