ADR-001 - Modulare Architektur
ADR-001: Modulare Architektur
Abschnitt betitelt „ADR-001: Modulare Architektur“Architecture Decision Record für XOOPS’s Kernphilosophie des modularen Designs.
Akzeptiert - Grundlegende Entscheidung seit XOOPS-Anfang
Context
Abschnitt betitelt „Context“XOOPS (eXtensible Object-Oriented Portal System) benötigte eine Architektur, die folgendes ermöglichte:
- Ermöglichen Sie Drittentwicklern, die Funktionalität zu erweitern
- Ermöglichen Sie Site-Administratoren, ohne Codierung anzupassen
- Unterstützen Sie unabhängige Entwicklung und Updates
- Bieten Sie Isolation zwischen verschiedenen Features
- Skalieren Sie von einfachen Blogs bis zu komplexen Portalen
Die CMS-Landschaft der frühen 2000er Jahre bot monolithische Systeme, die schwer zu kustomieren und zu erweitern waren.
Decision Diagram
Abschnitt betitelt „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 --> LDecision
Abschnitt betitelt „Decision“Wir werden eine modulare Architektur implementieren, bei der:
1. Kernkomponenten bieten Infrastruktur
Abschnitt betitelt „1. Kernkomponenten bieten Infrastruktur“- Datenbankabstraktion
- Benutzerauthentifizierung und Berechtigungen
- Template-Rendering (Smarty)
- Sicherheitsdienstprogramme
- Formulargenerierung
- Gemeinsame Dienstprogramme
2. Module sind in sich geschlossen
Abschnitt betitelt „2. Module sind in sich geschlossen“Jedes Modul:
- Hat seine eigene Verzeichnisstruktur
- Enthält seine eigenen Klassen, Templates, SQL
- Definiert seine eigene Konfiguration
- Kann unabhängig installiert/deinstalliert werden
- Hat Versionsverfolgung
3. Standardmodulstruktur
Abschnitt betitelt „3. Standardmodulstruktur“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. Modulmanifest (xoops_version.php)
Abschnitt betitelt „4. Modulmanifest (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. Modul-Kommunikation
Abschnitt betitelt „5. Modul-Kommunikation“- Über Core-APIs (Handler, Events)
- Datenbankbeziehungen
- Preload-Hooks
- Gemeinsame Dienste
Modul-Lebenszyklus
Abschnitt betitelt „Modul-Lebenszyklus“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 filesConsequences
Abschnitt betitelt „Consequences“Positiv
Abschnitt betitelt „Positiv“- Erweiterbarkeit: Tausende von Modulen von der Community erstellt
- Unabhängigkeit: Module können separat entwickelt werden
- Flexibilität: Sites können Features mischen und anpassen
- Wartbarkeit: Updates beeinflussen andere Module nicht
- Marketplace: Ein Modul-Ökosystem entstand
- Lernkurve: Entwickler lernen ein Muster
Negativ
Abschnitt betitelt „Negativ“- Overhead: Jedes Modul hat Bootstrap-Kosten
- Duplication: Gemeinsamer Code kann wiederholt werden
- Integration: Cross-Module-Features benötigen sorgfältiges Design
- Versionierung: Modul-Kompatibilitätsverwaltung erforderlich
- Qualitätsvarianz: Drittanbieter-Modulqualität variiert
Neutral
Abschnitt betitelt „Neutral“- Datenbank: Jedes Modul verwaltet seine eigenen Tabellen
- Templates: Theme muss verschiedene Module unterstützen
- Updates: Kern und Module werden unabhängig aktualisiert
Alternatives Considered
Abschnitt betitelt „Alternatives Considered“1. Monolithische Architektur
Abschnitt betitelt „1. Monolithische Architektur“Abgelehnt - Zu steif, schwer zu kustomieren
2. Plugin-Architektur (WordPress-Stil)
Abschnitt betitelt „2. Plugin-Architektur (WordPress-Stil)“Teilweise übernommen - Blöcke und Preloads bieten Plugin-ähnliche Hooks innerhalb von Modulen
3. Komponenten-Architektur (Joomla-Stil)
Abschnitt betitelt „3. Komponenten-Architektur (Joomla-Stil)“Abgelehnt - Komplexer, weniger entwicklerfreundlich
4. Microservices
Abschnitt betitelt „4. Microservices“Nicht anwendbar - Zu komplex für Shared-Hosting-Ära
Related Decisions
Abschnitt betitelt „Related Decisions“- ADR-002: Object-Oriented Database Access
- ADR-003: Smarty Template Engine
- ADR-005: Permission System
References
Abschnitt betitelt „References“- XOOPS Project History
- PHP Application Architecture Patterns
- CMS Comparison Studies (2001-2005)
#xoops #architecture #adr #modules #design-decision