Files
sap_tfi_2026/docs/04_arquitectura/estilos_arquitectonicos.md
T
saptfi2026-bot 6c8f468b71 feat(arquitectura): estilos arquitectonicos + referencia al apunte
Incorpora los conceptos de estilos arquitectonicos al diseno de Odoo,
basado en el apunte de la materia provisto por el usuario.

Cambios:

1. Nuevo diagrama D-ARQ-TECH-002 - Arquitectura con Estilos Arquitectonicos:
   - Identifica 8 estilos arquitectonicos aplicados a Odoo 19.0
   - Cliente-Servidor (browser <-> Odoo)
   - 3-Tier (Cliente | Aplicacion | Datos)
   - MVC (Vista/Controlador/Modelo)
   - Capas (Presentacion | Web | Logic | Addons)
   - Pipe-and-Filter (HTTP request pipeline)
   - Microkernel (addons via _inherit)
   - Repository (ORM Odoo encapsula BD)
   - Event-Driven (mail.thread, onchange, cron)

2. Nuevo documento docs/04_arquitectura/estilos_arquitectonicos.md:
   - Explicacion detallada de cada estilo
   - Aplicacion concreta a Odoo con evidencia EV-ARQ-001..006
   - Tabla de combinacion de estilos
   - Beneficios y trade-offs
   - Referencia al apunte de la materia

3. README actualizado:
   - Ejemplo 5 ahora menciona D-ARQ-TECH-001 y D-ARQ-TECH-002
   - Nueva seccion "Estilos arquitectonicos" en Recursos adicionales
   - Nueva entrada "Apunte de estilos arquitectonicos" en Referencia
     bibliografica con link al Google Drive

Archivos:
- diagrams/plantuml/d_arq_tech_002_estilos_arquitectonicos.puml
- diagrams/png/D-ARQ-TECH-002 ... .png
- diagrams/svg/D-ARQ-TECH-002 ... .svg
- diagrams/pdf/D-ARQ-TECH-002 ... .pdf
- docs/04_arquitectura/estilos_arquitectonicos.md
- README.md (actualizado)
2026-06-24 14:35:40 -03:00

8.8 KiB

Estilos Arquitectónicos aplicados a Odoo 19.0

Documento vivo. Última actualización: 2026-06-18. Basado en el apunte de la materia sobre estilos arquitectónicos.

Diagrama

Ver diagrams/plantuml/d_arq_tech_002_estilos_arquitectonicos.puml.

¿Qué son los estilos arquitectónicos?

Un estilo arquitectónico es un conjunto de principios y patrones que define cómo se organizan los componentes de un sistema, cómo interactúan entre sí y qué restricciones se imponen. Diferentes estilos son apropiados para diferentes tipos de sistemas.

En la práctica, los sistemas complejos como Odoo combinan varios estilos arquitectónicos en distintas partes. A continuación se describen los estilos identificados en la arquitectura de Odoo 19.0.


Estilos identificados en Odoo 19.0

1. Cliente-Servidor (Client-Server)

Descripción: el sistema se divide en dos partes: un cliente que solicita servicios y un servidor que los provee. La comunicación es típicamente request-response.

Aplicación en Odoo:

  • El navegador web (cliente) hace HTTP requests al servidor Odoo.
  • El servidor Odoo procesa cada request y devuelve la respuesta (HTML, JSON, PDF, etc.).
  • El servidor no inicia la comunicación; siempre es el cliente quien lo hace.

Evidencia:

  • EV-ARQ-001: Toda la comunicación se realiza vía HTTP/HTTPS (ver addons/web/http.py).

2. 3-Tier / N-Tier

Descripción: el sistema se divide en tres o más capas lógicas separadas: presentación, lógica de negocio y datos. Cada capa se comunica solo con la capa adyacente.

Aplicación en Odoo (N-Tier con 4 capas):

  • Capa 1: Cliente (navegador).
  • Capa 2: Servidor de aplicación Odoo (con 4 subcapas: Presentación, Web, Logic, Addons).
  • Capa 3: Persistencia (PostgreSQL, Filestore).
  • Capa 4: Integración externa (servicios de terceros).

Beneficio: cada capa puede escalarse, modificarse o reemplazarse independientemente.

3. MVC (Modelo-Vista-Controlador)

Descripción: patrón arquitectónico que separa la lógica de negocio (Modelo), la presentación (Vista) y el manejo de requests (Controlador).

Aplicación en Odoo (MVC extendido):

Componente MVC Implementación en Odoo
Modelo models/*.py (clases Python que heredan de models.Model). Encapsula datos y lógica de negocio.
Vista views/*.xml (form, tree, kanban, search). Define cómo se presentan los datos.
Controlador controllers/*.py (clases Python que heredan de http.Controller). Manejan HTTP requests.

Diferencia con MVC clásico: en Odoo, los controllers son opcionales. La mayoría de las vistas se generan automáticamente a partir del modelo. Solo se usan controllers cuando se necesita lógica HTTP custom (ej: endpoints REST, webhooks).

Evidencia:

  • EV-ARQ-002: addons/web/controllers/main.py — controllers principales de Odoo.
  • EV-ARQ-003: addons/sale/views/sale_order_views.xml — vistas del modelo sale.order.

4. Capas (Layered Architecture)

Descripción: cada capa provee servicios a la capa superior y consume servicios de la capa inferior. Las capas están estrictamente separadas.

Aplicación en Odoo (4 subcapas dentro de Capa 2):

  • Capa 2.1: Presentación: OWL, Views (XML), Static.
  • Capa 2.2: Web Layer: Router, Controllers, JSON-RPC, XML-RPC.
  • Capa 2.3: Business Logic: Models, ORM, Computed.
  • Capa 2.4: Addons: sale, account, stock, product (extensiones modulares).

Beneficio: cada capa tiene responsabilidades claras y límites bien definidos.

5. Pipe-and-Filter

Descripción: el procesamiento de datos se organiza como una cadena de filtros (procesadores) conectados por pipes (conductos). Cada filtro transforma los datos y los pasa al siguiente.

Aplicación en Odoo:

  • El pipeline de HTTP requests pasa por varios filtros antes de llegar al controller:
    1. Autenticación (validación de sesión).
    2. Routing (resolución de URL a controller).
    3. CSRF check (validación de token).
    4. Controller (procesamiento del request).
    5. Response (renderizado a JSON/HTML).

Evidencia:

  • EV-ARQ-004: addons/web/http.py — pipeline de middlewares de Odoo.

6. Microkernel (Plugin-Based)

Descripción: el sistema tiene un núcleo mínimo que provee funcionalidades básicas, y las funcionalidades adicionales se agregan como plugins (módulos).

Aplicación en Odoo:

  • El núcleo de Odoo provee el ORM, el framework HTTP y los modelos base (res.partner, res.company).
  • Los addons extienden el núcleo vía _inherit:
    • sale extiende mail.thread y agrega sale.order.
    • account extiende el modelo base y agrega account.move.
    • stock agrega stock.picking, stock.move, etc.

Beneficio: el sistema puede extenderse sin modificar el código del núcleo.

Evidencia:

  • EV-ARQ-005: addons/sale/models/sale_order.py:36_inherit = ['portal.mixin', 'product.catalog.mixin', 'mail.thread', ...].

7. Repository

Descripción: encapsula el acceso a datos detrás de una interfaz orientada a objetos. El cliente no interactúa directamente con la base de datos.

Aplicación en Odoo:

  • El ORM de Odoo encapsula el acceso a PostgreSQL.
  • Los modelos definen sus campos en Python y el ORM se encarga de crear las tablas, hacer queries, gestionar transacciones, etc.
  • El cliente (controller o vista) nunca hace SQL directamente; siempre interactúa con el ORM.

Beneficio: cambios en el esquema de BD no afectan la lógica de negocio.

Evidencia:

  • EV-ARQ-006: odoo/orm/ — implementación del ORM de Odoo.

8. Event-Driven

Descripción: el sistema reacciona a eventos publicados por otros componentes. Los componentes no se llaman entre sí directamente; se comunican vía eventos.

Aplicación en Odoo:

  • mail.thread: registra todos los cambios al modelo como mensajes (eventos).
  • onchange: dispara lógica cuando un campo cambia en el form.
  • @api.depends: recalcula campos cuando otros campos cambian.
  • Cron jobs: ejecutan tareas programadas periódicamente.
  • Webhooks: notifican a sistemas externos cuando ocurren eventos.

Beneficio: bajo acoplamiento entre componentes.


Combinación de estilos

Odoo no usa un solo estilo, sino una combinación de ellos. Esta es la práctica común en sistemas complejos.

Estilo Dónde se aplica Por qué
Cliente-Servidor Toda la comunicación Separación clara entre UI y lógica
3-Tier Capas 1, 2, 3 Aislamiento entre cliente, lógica y datos
MVC Capa 2 Separación entre modelo, vista y controlador
Capas Capa 2 (subcapas 2.1-2.4) Organización modular interna
Pipe-and-Filter Pipeline HTTP Procesamiento ordenado de requests
Microkernel Addons Extensibilidad sin modificar núcleo
Repository Capa 2.3 → Capa 3 Abstracción de persistencia
Event-Driven mail.thread, onchange, cron Reactividad y desacoplamiento

Consecuencias arquitectónicas

Beneficios

  • Extensibilidad: nuevos addons pueden agregarse sin modificar el núcleo (Microkernel).
  • Mantenibilidad: separación clara entre capas, MVC, lógica (Repository).
  • Escalabilidad: cada capa puede escalarse independientemente (3-Tier).
  • Reusabilidad: los addons pueden reutilizar funcionalidad de otros addons (Microkernel + MVC).
  • Interoperabilidad: el sistema expone APIs estándar (JSON-RPC, XML-RPC) para integraciones externas (Cliente-Servidor).

Trade-offs

  • Complejidad: la combinación de 8 estilos puede ser difícil de entender para nuevos desarrolladores.
  • Performance: el pipeline HTTP (Pipe-and-Filter) agrega latencia.
  • Acoplamiento entre addons: si dos addons se acoplan fuertemente vía _inherit, pueden romperse mutuamente al actualizarse.
  • Curva de aprendizaje: el ORM de Odoo (Repository) tiene una API específica que requiere tiempo para dominar.

Relación con el apunte de la materia

Este documento aplica los conceptos del apunte de la materia sobre estilos arquitectónicos al caso concreto de Odoo 19.0. Los estudiantes deben:

  1. Leer el apunte de la materia para entender los estilos teóricos.
  2. Leer este documento para ver cómo se aplican a un sistema real.
  3. Identificar los estilos en otros sistemas que conozcan (ej: otros ERPs, e-commerce, etc.).

Referencias