ADR-001 - Architektura modularna
ADR-001: Architektura modularna
Dział zatytułowany „ADR-001: Architektura modularna”Rekord decyzji architektonicznej dla filozofii projektowania modularnego XOOPS.
Accepted - Fundamentalna decyzja od powstania XOOPS
Kontekst
Dział zatytułowany „Kontekst”XOOPS (eXtensible Object-Oriented Portal System) potrzebował architektury, która by:
- Pozwalała programistom trzecich stron na rozszerzanie funkcjonalności
- Umożliwiała administratorom witryn dostosowanie bez kodowania
- Wspierała niezależny rozwój i aktualizacje
- Zapewniała izolację między różnymi funkcjami
- Skalowała się od prostych blogów do złożonych portali
Krajobraz CMS z wczesnych 2000 roku oferował monolityczne systemy, które były trudne do dostosowania i rozszerzenia.
Diagram decyzji
Dział zatytułowany „Diagram decyzji”graph TB subgraph "Rdzeń XOOPS" A[Kernel] B[Warstwa bazy danych] C[System użytkownika] D[Silnik szablonów] E[Bezpieczeństwo] end
subgraph "System modułów" F[Loader modułów] G[Rejestr modułów] H[Uprawnienia modułów] end
subgraph "Zainstalowane moduły" I[Moduł wiadomości] J[Moduł forum] K[Moduł galerii] L[Moduł niestandardowy] 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 --> LDecyzja
Dział zatytułowany „Decyzja”Wdrożymy architekturę modularną, w której:
1. Rdzeń zapewnia infrastrukturę
Dział zatytułowany „1. Rdzeń zapewnia infrastrukturę”- Abstrakcja bazy danych
- Uwierzytelnianie użytkowników i uprawnienia
- Renderowanie szablonów (Smarty)
- Narzędzia bezpieczeństwa
- Generowanie formularzy
- Wspólne narzędzia
2. Moduły są samodzielne
Dział zatytułowany „2. Moduły są samodzielne”Każdy moduł:
- Ma swoją własną strukturę katalogów
- Zawiera własne klasy, szablony, SQL
- Definiuje własną konfigurację
- Może być instalowany/odinstalowywany niezależnie
- Ma śledzenie wersji
3. Standardowa struktura modułu
Dział zatytułowany „3. Standardowa struktura modułu”modules/modulename/├── admin/ # Interfejs administracyjny│ ├── index.php│ └── menu.php├── class/ # Klasy PHP├── include/ # Pliki include├── language/ # Tłumaczenia├── sql/ # Schema bazy danych├── templates/ # Szablony Smarty├── blocks/ # Definicje bloków├── xoops_version.php # Manifest modułu├── index.php # Punkt wejścia└── header.php # Bootstrap modułu4. Manifest modułu (xoops_version.php)
Dział zatytułowany „4. Manifest modułu (xoops_version.php)”<?php$modversion['name'] = 'Nazwa modułu';$modversion['version'] = '1.0.0';$modversion['description'] = 'Opis modułu';$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. Komunikacja modułu
Dział zatytułowany „5. Komunikacja modułu”- Za pośrednictwem interfejsów API rdzenia (handlery, zdarzenia)
- Relacje bazy danych
- Haki preload
- Usługi wspólne
Cykl życia modułu
Dział zatytułowany „Cykl życia modułu”stateDiagram-v2 [*] --> Dostępne: Wgraj do modules/ Dostępne --> Instalowanie: Admin kliknie Zainstaluj Instalowanie --> Zainstalowane: SQL wykonany, rekordy utworzone Zainstalowane --> Aktywne: Admin aktywuje
Aktywne --> Aktualizowanie: Nowa wersja wgrana Aktualizowanie --> Aktywne: Skrypty aktualizacji uruchamiane
Aktywne --> Nieaktywne: Admin dezaktywuje Nieaktywne --> Aktywne: Admin reaktywuje Nieaktywne --> Odinstalowywanie: Admin odinstalowuje
Odinstalowywanie --> Dostępne: Zachowaj pliki Odinstalowywanie --> [*]: Usuń plikiKonsekwencje
Dział zatytułowany „Konsekwencje”Pozytywne
Dział zatytułowany „Pozytywne”- Rozszerzalność: Tysiące modułów utworzonych przez społeczność
- Niezależność: Moduły mogą być opracowywane oddzielnie
- Elastyczność: Witryny mogą mieszać i dopasowywać funkcje
- Utrzymywalność: Aktualizacje nie wpływają na inne moduły
- Marketplace: Ekosystem modułów się pojawił
- Krzywa nauki: Programiści uczą się jednego wzorca
Negatywne
Dział zatytułowany „Negatywne”- Narzut: Każdy moduł ma koszt bootstrap
- Duplikacja: Wspólny kod może być powtarzany
- Integracja: Funkcje między modułami wymagają starannego projektowania
- Wersjonowanie: Potrzebne zarządzanie kompatybilnością modułu
- Zmienność jakości: Jakość modułu trzeciej strony się różni
Neutralne
Dział zatytułowany „Neutralne”- Baza danych: Każdy moduł zarządza własnymi tabelami
- Szablony: Motyw musi uwzględnić różne moduły
- Aktualizacje: Rdzeń i moduły aktualizują się niezależnie
Rozważane alternatywy
Dział zatytułowany „Rozważane alternatywy”1. Architektura monolityczna
Dział zatytułowany „1. Architektura monolityczna”Odrzucone - Za sztywne, trudne do dostosowania
2. Architektura plug-in (w stylu WordPress)
Dział zatytułowany „2. Architektura plug-in (w stylu WordPress)”Częściowo przyjęte - Bloki i preloads zapewniają hook-i podobne do wtyczek w obrębie modułów
3. Architektura komponentów (w stylu Joomla)
Dział zatytułowany „3. Architektura komponentów (w stylu Joomla)”Odrzucone - Bardziej złożona, mniej przyjazna dla programistów
4. Mikrousługi
Dział zatytułowany „4. Mikrousługi”Nie dotyczy - Za złożone dla ery hostingu współdzielonego
Powiązane decyzje
Dział zatytułowany „Powiązane decyzje”- ADR-002: Obiektowy dostęp do bazy danych
- ADR-003: Silnik szablonów Smarty
- ADR-005: System uprawnień
Odwołania
Dział zatytułowany „Odwołania”- Historia projektu XOOPS
- Wzorce architektoniczne aplikacji PHP
- Badania porównawcze CMS (2001-2005)
#xoops #architektura #adr #moduły #decyzja-projektowa