Ingeniería de Clocksiris
Arquitectura, decisiones y prácticas que sostienen una aplicación local-first para Windows y Android.
Detalles de ingeniería
Clocksiris separa las reglas de negocio, los casos de uso, la persistencia y la presentación para mantener una base clara, multiplataforma y preparada para evolucionar.
Resumen técnico
Arquitectura
Responsabilidades separadas
El diseño organiza el dominio, los casos de uso, la persistencia y la presentación con límites claros y dependencias dirigidas hacia las reglas del negocio.
Plataformas
Una base para Windows y Android
La aplicación comparte la mayor parte de su experiencia entre escritorio y dispositivos móviles, adaptando composición, densidad y navegación a cada entorno.
Calidad y continuidad
Una operación local verificable
Las reglas y los casos de uso se validan con pruebas automatizadas, mientras el almacenamiento local, los backups y la restauración protegen la continuidad del trabajo.
Arquitectura y límites
Experiencia multiplataforma
La presentación reúne páginas, navegación y estado visual para ofrecer una experiencia coherente en Windows y Android.
Casos de uso
La coordinación de temporizadores, entradas, reportes, exportaciones y backups mantiene cada flujo enfocado en una capacidad del producto.
Dominio y reglas de negocio
El modelo concentra las reglas de clientes, proyectos, tareas, tiempo, tarifas, facturación y configuración.
Persistencia y servicios locales
La base de datos local, los archivos, las exportaciones, los backups y la restauración sostienen la operación sin trasladar el control de la información a un servicio externo.
Decisiones y tradeoffs
| Decisión | Motivo | Beneficio | Tradeoff y revisión |
|---|---|---|---|
| Local-first frente a nube | Priorizar autonomía, disponibilidad sin red y control de los datos. | Las tareas principales no dependen de un servicio externo y la información permanece en el dispositivo. | La sincronización automática entre dispositivos no forma parte del MVP; revisar si aparece una necesidad real de colaboración o movilidad. |
| SQLite y Entity Framework Core | Usar una base embebida con un modelo relacional mantenible. | Simplicidad operativa, consistencia local y una evolución ordenada del modelo de datos. | La aplicación debe gestionar explícitamente la inicialización, las migraciones y la ubicación de los archivos. |
| Modelo de dominio explícito | Proteger conceptos como intervalos, duración, tarifas, moneda y dinero. | Las reglas importantes permanecen cerca del negocio y no se dispersan en la interfaz o la base de datos. | Requiere más modelado inicial; revisar el modelo cuando cambien los límites del producto. |
| Tarifas e historial | Conservar la tarifa aplicada y el importe estimado dentro de cada registro. | El historial mantiene su significado aunque cambien las tarifas o los ajustes posteriores. | Los registros contienen datos derivados; revisar las reglas si aparecen más tipos de tarifa o moneda. |
| Una base MAUI para dos plataformas | Compartir la mayor parte de la aplicación entre Windows y Android. | Una base visual y de navegación común con adaptación a cada dispositivo. | Hay que equilibrar el código compartido con las diferencias de densidad, navegación e interacción. |
Stack tecnológico
Aplicación
Base multiplataforma
C# y .NET 10 sostienen la aplicación, mientras .NET MAUI permite compartir la experiencia entre Windows y Android. Clean Architecture, CQRS, Vertical Slice Architecture y MVVM organizan las responsabilidades.
Persistencia
Datos locales organizados
SQLite y Entity Framework Core proporcionan persistencia embebida y un modelo de datos que puede evolucionar de forma controlada.
Experiencia
Estado e interacción
Las librerías de CommunityToolkit apoyan propiedades observables, view models y utilidades compartidas de la interfaz.
Exportación y calidad
Resultados verificables
ClosedXML permite generar archivos Excel y la estrategia de pruebas utiliza xUnit, Moq y Coverlet para validar las capas core.
Calidad y operación
Reglas de negocio
Las pruebas unitarias cubren intervalos, transiciones del temporizador, relaciones entre proyectos y tareas, resolución de tarifas, facturación y configuración.
Casos de uso
La cobertura se concentra en registro de tiempo, historial, clientes, proyectos, tareas, dashboard, reportes, exportaciones, ajustes y backups.
Alcance automatizado actual
La estrategia utiliza xUnit, Moq y Coverlet para pruebas unitarias de las capas de dominio y aplicación. No incluye pruebas automatizadas de UI, integración o end-to-end.
¿Quieres volver a la narrativa del producto?