Contenido del curso

Web App con FastAPI + Docker

Cursor genera capas data y domain en iOS

Resumen

Conectar un documento de arquitectura Clean con Cursor permite generar de forma automática las capas de data, domain y servicios de red en una app iOS, sin escribir manualmente cada archivo. Aquí descubres cómo guiar a Cursor con prompts precisos para que respete tus contratos, evite errores de referencia y produzca código listo para conectarse con la UI.

¿Cómo preparar el proyecto antes de generar código con Cursor?

Antes de pedirle a Cursor que genere lógica, conviene dejar el terreno listo para que no tropiece con referencias rotas.

En la práctica, eso implica crear desde Xcode las carpetas y archivos vacíos que reflejan tu arquitectura. Esta preparación previa evita el clásico problema en el que Cursor crea un archivo, intenta usarlo y falla porque aún no está indexado.

  • Cierra carpetas previas y crea un nuevo folder llamado Services directamente en Xcode.
  • Mantén los archivos vacíos pero con los nombres definidos en tu documento de arquitectura.
  • Abre un chat nuevo en Cursor para separar la lógica de servicios de la conversación previa de UI.

¿Por qué crear archivos vacíos antes de usar Cursor? Porque previene errores de referencia. Cursor reconoce la estructura existente y genera el código dentro de ella, en lugar de inventar rutas que rompen la compilación.

¿Cómo pedirle a Cursor que cree la capa de servicios HTTP?

El primer prompt apunta a la capa de red. La instrucción es deliberadamente genérica: crear los archivos y objetos necesarios para tener un servicio de request HTTP reutilizable, sin especificar tecnologías ni dependencias.

Con ese prompt, Cursor propone una estructura con cuatro piezas clave: un archivo de errores, un endpoint del API, un método y un manager que orquesta los servicios de red. Es un enfoque limpio y reutilizable.

Durante la generación pueden aparecer errores de redeclaración. Por ejemplo, el protocolo API endpoint puede quedar duplicado dentro del network manager y también como archivo separado. La solución es eliminar manualmente las declaraciones repetidas y volver a compilar con Command + B en Xcode.

¿Qué hago si Cursor sigue marcando errores tras compilar? Cierra Cursor y vuelve a abrirlo. El editor reindexa los archivos y los falsos errores desaparecen.

¿Conviene dejar archivos de ejemplo que genera Cursor?

Cursor suele añadir un archivo demostrativo de cómo usar los endpoints. Si no lo necesitas, elimínalo y vuelve a compilar. Mantener solo lo esencial reduce ruido en el repositorio y deja la capa de servicios lista para usarse más adelante.

¿Cómo generar las capas de data y domain con tus contratos?

Una vez lista la capa de servicios, abre un chat nuevo para que el contexto no se mezcle. El prompt central es: implementar la capa de data y domain siguiendo tu documento de Clean Architecture y la definición de contratos.

La clave está en pasarle a Cursor tres referencias explícitas:

  • El archivo de Clean Architecture con la definición de capas.
  • El archivo con los contratos y objetos del backend.
  • La carpeta de Services creada antes, para que reutilice el network service.

También es útil aclarar la URL base del API. En este caso, el servidor corre en localhost en el puerto 8000, así que el valor pasado a Cursor es http://localhost:8000. Indicarle que revise los archivos previamente creados en domain y data refuerza el respeto por la estructura existente.

¿Qué es un DTO en este contexto? Es un objeto de transferencia de datos que representa la forma cruda en que llega la información desde el API, antes de mapearse al modelo de dominio.

¿Qué genera Cursor cuando recibe los contratos?

Con esas referencias, Cursor produce varios elementos a la vez. Genera los DTO de las entidades del backend, los mappers que convierten DTO en modelos de dominio, el modelo de dominio dentro de la capa correspondiente y la implementación del repositorio remoto.

El repositorio usa el network service sin fricciones, lo que confirma que la referencia cruzada entre capas funcionó. Cursor incluso se adelanta y crea protocolos completos basados en los contratos, aunque tu prompt solo pidiera una función concreta.

Durante la generación puede aparecer un warning indicando que se alcanzó el tope de llamadas. La opción resume the conversation permite que Cursor continúe generando los archivos faltantes sin perder el contexto.

¿Cómo validar que el código generado funciona?

La validación final ocurre en Xcode. Tras aceptar todos los cambios, un Command + B debería arrojar build success. Si compila, la capa de data, la capa de domain y los requests contra el API quedan operativos.

Lo único que falta es conectar todo con la capa de presentación, es decir, con las vistas y los view models. Ese paso enlaza la lógica generada con la UI creada previamente y permite probar el flujo de extremo a extremo.

¿Has probado generar arquitecturas completas desde un documento? Cuéntame en los comentarios qué prompts te funcionaron mejor.