ADR-001 - Αρθρωτή Αρχιτεκτονική
ADR-001: Modular Architecture
Ενότητα με τίτλο «ADR-001: Modular Architecture»Αρχείο απόφασης αρχιτεκτονικής για τη βασική φιλοσοφία αρθρωτού σχεδιασμού του XOOPS.
Κατάσταση
Ενότητα με τίτλο «Κατάσταση»Εγκρίθηκε - Θεμελιώδης απόφαση από την έναρξη του XOOPS
Περιεχόμενο
Ενότητα με τίτλο «Περιεχόμενο»Το XOOPS (eXtensible Object-Oriented Portal System) χρειαζόταν μια αρχιτεκτονική που θα:
- Επιτρέψτε σε τρίτους προγραμματιστές να επεκτείνουν τη λειτουργικότητα
- Δώστε τη δυνατότητα στους διαχειριστές του ιστότοπου να προσαρμόζουν χωρίς κωδικοποίηση
- Υποστήριξη ανεξάρτητης ανάπτυξης και ενημερώσεων
- Παρέχετε απομόνωση μεταξύ διαφορετικών χαρακτηριστικών
- Κλίμακα από απλά ιστολόγια σε πολύπλοκες πύλες
Το τοπίο CMS των αρχών της δεκαετίας του 2000 προσέφερε μονολιθικά συστήματα που ήταν δύσκολο να προσαρμοστούν και να επεκταθούν.
Διάγραμμα απόφασης
Ενότητα με τίτλο «Διάγραμμα απόφασης»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 --> LΑπόφαση
Ενότητα με τίτλο «Απόφαση»Θα εφαρμόσουμε μια αρθρωτή αρχιτεκτονική όπου:
# 1. Ο πυρήνας παρέχει υποδομή
Ενότητα με τίτλο «# 1. Ο πυρήνας παρέχει υποδομή»- Αφαίρεση βάσης δεδομένων
- Έλεγχος ταυτότητας χρήστη και δικαιώματα
- Απόδοση προτύπου (Smarty)
- Υπηρεσίες ασφαλείας
- Δημιουργία φόρμας
- Κοινές υπηρεσίες κοινής ωφέλειας
# 2. Οι ενότητες είναι αυτόνομες
Ενότητα με τίτλο «# 2. Οι ενότητες είναι αυτόνομες»Κάθε ενότητα:
- Έχει τη δική του δομή καταλόγου
- Περιέχει τις δικές του κλάσεις, πρότυπα, SQL
- Ορίζει τη δική του διαμόρφωση
- Μπορεί να είναι installed/uninstalled ανεξάρτητα
- Διαθέτει παρακολούθηση έκδοσης
# 3. Τυπική δομή μονάδας
Ενότητα με τίτλο «# 3. Τυπική δομή μονάδας»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 bootstrap# 4. Μανιφέστο ενότητας (xoops_version.php)
Ενότητα με τίτλο «# 4. Μανιφέστο ενότητας (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. Ενότητα Επικοινωνίας
Ενότητα με τίτλο «# 5. Ενότητα Επικοινωνίας»- Μέσω βασικών API (χειριστές, συμβάντα)
- Σχέσεις βάσεων δεδομένων
- Προφόρτωση γάντζων
- Κοινόχρηστες υπηρεσίες
Κύκλος ζωής ενότητας
Ενότητα με τίτλο «Κύκλος ζωής ενότητας»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 filesΣυνέπειες
Ενότητα με τίτλο «Συνέπειες»# Θετικό
Ενότητα με τίτλο «# Θετικό»- Επεκτασιμότητα: Χιλιάδες ενότητες που δημιουργήθηκαν από την κοινότητα
- Ανεξαρτησία: Οι ενότητες μπορούν να αναπτυχθούν ξεχωριστά
- Ευελιξία: Οι ιστότοποι μπορούν να συνδυάζουν και να ταιριάζουν χαρακτηριστικά
- Δυνατότητα συντήρησης: Οι ενημερώσεις δεν επηρεάζουν άλλες μονάδες
- Marketplace: Εμφανίστηκε το οικοσύστημα ενότητας
- Καμπύλη μάθησης: Οι προγραμματιστές μαθαίνουν ένα μοτίβο
# Αρνητικό
Ενότητα με τίτλο «# Αρνητικό»- Γενικά έξοδα: Κάθε ενότητα έχει κόστος εκκίνησης
- Αντιγραφή: Ο κοινός κωδικός μπορεί να επαναληφθεί
- Ενσωμάτωση: Τα χαρακτηριστικά πολλαπλών μονάδων χρειάζονται προσεκτικό σχεδιασμό
- Έκδοση: Απαιτείται διαχείριση συμβατότητας μονάδας
- Διακύμανση ποιότητας: Η ποιότητα της μονάδας τρίτου κατασκευαστή ποικίλλει
# Ουδέτερο
Ενότητα με τίτλο «# Ουδέτερο»- Βάση δεδομένων: Κάθε λειτουργική μονάδα διαχειρίζεται τους δικούς της πίνακες
- Πρότυπα: Το θέμα πρέπει να φιλοξενεί διάφορες ενότητες
- Ενημερώσεις: Ο πυρήνας και οι μονάδες ενημερώνονται ανεξάρτητα
Εξετάζονται εναλλακτικές λύσεις
Ενότητα με τίτλο «Εξετάζονται εναλλακτικές λύσεις»# 1. Μονολιθική Αρχιτεκτονική
Ενότητα με τίτλο «# 1. Μονολιθική Αρχιτεκτονική»Απορρίφθηκε - Πολύ άκαμπτο, δύσκολο να προσαρμοστεί
# 2. Αρχιτεκτονική προσθηκών (στυλ WordPress)
Ενότητα με τίτλο «# 2. Αρχιτεκτονική προσθηκών (στυλ WordPress)»Μερικώς εγκρίθηκε - Τα μπλοκ και οι προφορτώσεις παρέχουν άγκιστρα τύπου πρόσθετων εντός των λειτουργικών μονάδων
# 3. Αρχιτεκτονική στοιχείων (στυλ Joomla)
Ενότητα με τίτλο «# 3. Αρχιτεκτονική στοιχείων (στυλ Joomla)»Απορρίφθηκε - Πιο περίπλοκο, λιγότερο φιλικό προς τους προγραμματιστές
# 4. Μικροϋπηρεσίες
Ενότητα με τίτλο «# 4. Μικροϋπηρεσίες»Δεν ισχύει - Πολύ περίπλοκο για την εποχή κοινής φιλοξενίας
Σχετικές Αποφάσεις
Ενότητα με τίτλο «Σχετικές Αποφάσεις»- ADR-002: Αντικειμενοστραφή πρόσβαση σε βάση δεδομένων
- ADR-003: Smarty Template Engine
- ADR-005: Σύστημα αδειών
Αναφορές
Ενότητα με τίτλο «Αναφορές»- XOOPS Ιστορικό έργου
- PHP Μοτίβα Αρχιτεκτονικής Εφαρμογών
- CMS Συγκριτικές Μελέτες (2001-2005)