4.3. Patrones de Diseño Aplicados
Para asegurar que el código sea mantenible, escalable y cumpla con los estándares de la ingeniería de software, se han implementado los siguientes patrones arquitectónicos:
-
Patrón MVC (Modelo-Vista-Controlador):
Utilizado estrictamente en el cliente Python con el framework PySide6. La interfaz gráfica (Vista) es completamente "tonta" e independiente. Los Controladores interceptan las acciones del usuario (ej. pulsar el botón "Escanear") y actualizan los Modelos, que son los encargados de interactuar con la base de datos SQLite.
-
Patrón Pipeline (Tubería de Datos):
Implementado en el motor de escaneo local. Cada archivo encontrado en el
$HOMEpasa por una cadena de montaje secuencial:Descubrimiento → Heurística XDG → Filtrado de Ignores → Petición API (si es necesario) → Persistencia.Decisión Arquitectónica Clave: Es crucial destacar este orden de ejecución. La heurística local actúa primero para rescatar e identificar archivos legítimos (ej. un
.bash_historyque el usuario sí desea versionar con el paquete de Bash). Solo a los archivos no identificados (huérfanos) se les aplican posteriormente las reglas de exclusión (ignorando extensiones genéricas de caché o logs). Esto garantiza que no se pierdan datos útiles y, a su vez, evita enviar "basura" al servidor, optimizando drásticamente el uso de la API. -
Arquitectura REST (Representational State Transfer):
Define la interfaz de comunicación entre Python y Java. El servidor expone Endpoints semánticos (ej.
POST /api/v1/classify) que devuelven códigos de estado HTTP estándar (200 OK, 404 Not Found, 500 Server Error) y respuestas en formato JSON puro, garantizando la interoperabilidad entre ambos lenguajes.