Skip to content

Arquitectura y Decisiones de Diseño 🏗️

En esta sección se detallan las bases técnicas que sostienen el sistema de gestión del supermercado, justificando el uso de estándares de industria para garantizar un código profesional, mantenible y escalable.


📂 Estructura de Proyecto: src Layout

El proyecto implementa el patrón src layout, una convención recomendada en el ecosistema Python para evitar importaciones accidentales del código fuente y asegurar que las pruebas se ejecuten contra el paquete instalado.

Beneficios del src Layout

  • Separación Clara: El código de la aplicación está aislado de los archivos de configuración (pyproject.toml, mkdocs.yml, tests/).
  • Consistencia: Facilita el empaquetado y la distribución del software.
  • Protección: Evita que scripts en la raíz del proyecto interfieran con los módulos internos.

🏛️ Separación por Capas

Para este supermercado, se ha aplicado una Arquitectura de Responsabilidad Única, conectada de forma lineal para reducir el acoplamiento.

Flujo de Dependencias

flowchart LR
    CLI[Capa de comandos] --> Servicios[Capa de logica]
    Servicios <--> Almacenamiento[Capa de almacenamiento interno]
    Servicios <--> Modelos[Capa de modelos de objetos]

Tabla de Arquitectura por Capas 🏛️

A continuación se detalla la estructura del sistema del supermercado, especificando la implementación real en el código y el principio de diseño aplicado a cada nivel.

Capa Implementación en el Proyecto Responsabilidad y Decisión de Diseño
1. Interfaz (Presentación) main.py (Typer) / streamlit_app.py Punto de Entrada: Se encarga exclusivamente de la interacción con el usuario. Al estar aislada, permite que el sistema funcione en terminal o web sin cambiar la lógica interna.
2. Aplicación (Servicios) src/gerencia_app/servicios.py Lógica de Negocio: Actúa como mediador. Orquesta los "Casos de Uso" (ventas, registros, gestión de stock) coordinando las capas de Dominio e Infraestructura.
3. Dominio (Modelos) src/gerencia_app/modelos/ Entidades Puras: Define las estructuras base (Usuario y Producto). No depende de ninguna base de datos ni librería externa, manteniendo la integridad de los datos en memoria.
4. Infraestructura (Persistencia) src/gerencia_app/almacenamiento.py Persistencia Física: Gestiona el acceso al disco duro. Utiliza JSONStorage para leer y escribir archivos físicos, abstrayendo al resto del sistema de cómo se guardan los datos.