ADR-001 - Arquitectura Modular
ADR-001: Arquitectura Modular
Sección titulada «ADR-001: Arquitectura Modular»Registro de Decisión Arquitectónica para la filosofía de diseño modular central de XOOPS.
Aceptado - Decisión fundamental desde el inicio de XOOPS
Contexto
Sección titulada «Contexto»XOOPS (Sistema de Portal Orientado a Objetos Extensible) necesitaba una arquitectura que:
- Permita a desarrolladores de terceros extender la funcionalidad
- Capacite a los administradores del sitio para personalizar sin codificar
- Apoye el desarrollo e actualización independientes
- Proporcione aislamiento entre diferentes características
- Escale desde blogs simples a portales complejos
El panorama de CMS de principios de los años 2000 ofrecía sistemas monolíticos que eran difíciles de personalizar y extender.
Decision Diagram
Sección titulada «Decision Diagram»graph TB subgraph "XOOPS Core" A[Kernel] B[Database Layer] C[User System] D[Template Engine] E[Security] end
subgraph "Module System" F[Module Loader] G[Module Registry] H[Module Permissions] end
subgraph "Installed Modules" I[News Module] J[Forum Module] K[Gallery Module] L[Custom Module] end
A --> F B --> F C --> H D --> F E --> H
F --> G G --> I G --> J G --> K G --> L
H --> I H --> J H --> K H --> LDecisión
Sección titulada «Decisión»Implementaremos una arquitectura modular donde:
1. El Core Proporciona Infraestructura
Sección titulada «1. El Core Proporciona Infraestructura»- Abstracción de base de datos
- Autenticación y permisos de usuario
- Renderizado de plantillas (Smarty)
- Utilidades de seguridad
- Generación de formularios
- Utilidades comunes
2. Los Módulos Son Independientes
Sección titulada «2. Los Módulos Son Independientes»Cada módulo:
- Tiene su propia estructura de directorios
- Contiene sus propias clases, plantillas, SQL
- Define su propia configuración
- Puede ser instalado/desinstalado independientemente
- Tiene seguimiento de versiones
3. Estructura Estándar de Módulo
Sección titulada «3. Estructura Estándar de Módulo»modules/modulename/├── admin/ # Admin interface│ ├── index.php│ └── menu.php├── class/ # PHP classes├── include/ # Include files├── language/ # Translations├── sql/ # Database schema├── templates/ # Smarty templates├── blocks/ # Block definitions├── xoops_version.php # Module manifest├── index.php # Entry point└── header.php # Module bootstrap4. Manifiesto de Módulo (xoops_version.php)
Sección titulada «4. Manifiesto de Módulo (xoops_version.php)»<?php$modversion['name'] = 'Module Name';$modversion['version'] = '1.0.0';$modversion['description'] = 'Module description';$modversion['dirname'] = basename(__DIR__);$modversion['hasMain'] = 1;$modversion['hasAdmin'] = 1;$modversion['sqlfile']['mysql'] = 'sql/mysql.sql';$modversion['tables'] = ['modulename_table1'];$modversion['templates'] = [...];$modversion['config'] = [...];$modversion['blocks'] = [...];5. Comunicación de Módulos
Sección titulada «5. Comunicación de Módulos»- A través de APIs del core (handlers, events)
- Relaciones de base de datos
- Hooks de precarga
- Servicios compartidos
Ciclo de Vida del Módulo
Sección titulada «Ciclo de Vida del Módulo»stateDiagram-v2 [*] --> Available: Upload to modules/ Available --> Installing: Admin clicks Install Installing --> Installed: SQL executed, records created Installed --> Active: Admin activates
Active --> Updating: New version uploaded Updating --> Active: Update scripts run
Active --> Inactive: Admin deactivates Inactive --> Active: Admin reactivates Inactive --> Uninstalling: Admin uninstalls
Uninstalling --> Available: Keep files Uninstalling --> [*]: Remove filesConsecuencias
Sección titulada «Consecuencias»Positivas
Sección titulada «Positivas»- Extensibilidad: Miles de módulos creados por la comunidad
- Independencia: Los módulos se pueden desarrollar por separado
- Flexibilidad: Los sitios pueden mezclar y combinar funciones
- Mantenibilidad: Las actualizaciones no afectan otros módulos
- Mercado: Surgió un ecosistema de módulos
- Curva de aprendizaje: Los desarrolladores aprenden un patrón
Negativas
Sección titulada «Negativas»- Sobrecarga: Cada módulo tiene un costo de inicialización
- Duplicación: El código común puede repetirse
- Integración: Las características entre módulos necesitan un diseño cuidadoso
- Versionado: Se necesita gestión de compatibilidad de módulos
- Variación de calidad: La calidad de módulos de terceros varía
Neutrales
Sección titulada «Neutrales»- Base de datos: Cada módulo gestiona sus propias tablas
- Plantillas: El tema debe adaptarse a varios módulos
- Actualizaciones: El core y los módulos se actualizan independientemente
Alternativas Consideradas
Sección titulada «Alternativas Consideradas»1. Arquitectura Monolítica
Sección titulada «1. Arquitectura Monolítica»Rechazada - Demasiado rígida, difícil de personalizar
2. Arquitectura de Plugins (estilo WordPress)
Sección titulada «2. Arquitectura de Plugins (estilo WordPress)»Parcialmente adoptada - Los bloques y precargas proporcionan hooks similares a plugins dentro de módulos
3. Arquitectura de Componentes (estilo Joomla)
Sección titulada «3. Arquitectura de Componentes (estilo Joomla)»Rechazada - Más compleja, menos amigable para desarrolladores
4. Microservicios
Sección titulada «4. Microservicios»No aplicable - Demasiado complejo para la era del alojamiento compartido
Decisiones Relacionadas
Sección titulada «Decisiones Relacionadas»- ADR-002: Acceso a Base de Datos Orientado a Objetos
- ADR-003: Motor de Plantillas Smarty
- ADR-005: Sistema de Permisos
Referencias
Sección titulada «Referencias»- Historial del Proyecto XOOPS
- Patrones de Arquitectura de Aplicaciones PHP
- Estudios de Comparación de CMS (2001-2005)
#xoops #architecture #adr #modules #design-decision