ADR-001 - ארכיטקטורה מודולרית
ADR-001: ארכיטקטורה מודולרית
Section titled “ADR-001: ארכיטקטורה מודולרית”שיא החלטות אדריכלות עבור פילוסופיית העיצוב המודולרי המרכזי של XOOPS.
התקבלה - החלטה יסודית מאז הקמת XOOPS
XOOPS (מערכת eXtensible Object-Oriented Portal) הייתה זקוקה לארכיטקטורה שת:
- אפשר למפתחי צד שלישי להרחיב את הפונקציונליות
- אפשר למנהלי אתרים להתאים אישית ללא קידוד
- תמיכה בפיתוח עצמאי ועדכונים
- לספק בידוד בין תכונות שונות
- קנה מידה מבלוגים פשוטים לפורטלים מורכבים
נוף CMS המוקדמות של שנות ה-2000 הציע מערכות מונוליטיות שקשה היה להתאים ולהרחיב אותן.
דיאגרמת החלטה
Section titled “דיאגרמת החלטה”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. ליבה מספקת תשתית
Section titled “1. ליבה מספקת תשתית”- הפשטת מסדי נתונים
- אימות משתמש והרשאות
- עיבוד תבנית (Smarty)
- כלי אבטחה
- יצירת טפסים
- כלי עזר נפוצים
2. המודולים הם עצמאיים
Section titled “2. המודולים הם עצמאיים”כל מודול:
- יש מבנה ספריות משלו
- מכיל מחלקות משלו, תבניות, SQL
- מגדיר את התצורה שלו
- יכול להיות installed/uninstalled באופן עצמאי
- יש מעקב אחר גרסאות
3. מבנה מודול סטנדרטי
Section titled “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 bootstrap4. מניפסט מודול (xoops_version.php)
Section titled “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. תקשורת מודול
Section titled “5. תקשורת מודול”- דרך הליבה APIs (מטפלים, אירועים)
- קשרי מסד נתונים
- ווי טעינה מראש
- שירותים משותפים
מחזור חיים של מודול
Section titled “מחזור חיים של מודול”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השלכות
Section titled “השלכות”- ניתן להרחבה: אלפי מודולים שנוצרו על ידי הקהילה
- עצמאות: ניתן לפתח מודולים בנפרד
- גמישות: אתרים יכולים לערבב ולהתאים תכונות
- תחזוקה: עדכונים אינם משפיעים על מודולים אחרים
- שוק: מערכת אקולוגית של מודול הופיעה
- עקומת למידה: מפתחים לומדים דפוס אחד
- תקורה: לכל מודול יש עלות אתחול
- כפול: ייתכן שקוד נפוץ יחזור על עצמו
- שילוב: תכונות חוצות מודולים זקוקות לתכנון קפדני
- גירסאות: נדרש ניהול תאימות מודול
- שונות איכות: איכות המודול של צד שלישי משתנה
ניטרלי
Section titled “ניטרלי”- מסד נתונים: כל מודול מנהל את הטבלאות שלו
- תבניות: ערכת הנושא חייבת להכיל מודולים שונים
- עדכונים: הליבה והמודולים מתעדכנים באופן עצמאי
נשקלו חלופות
Section titled “נשקלו חלופות”1. אדריכלות מונוליתית
Section titled “1. אדריכלות מונוליתית”נדחה - נוקשה מדי, קשה להתאמה אישית
2. ארכיטקטורת תוסף (בסגנון וורדפרס)
Section titled “2. ארכיטקטורת תוסף (בסגנון וורדפרס)”אומץ חלקית - בלוקים וטעינות מראש מספקים ווים דמויי פלאגין בתוך מודולים
3. ארכיטקטורת רכיבים (בסגנון ג’ומלה)
Section titled “3. ארכיטקטורת רכיבים (בסגנון ג’ומלה)”נדחה - מורכב יותר, פחות ידידותי למפתחים
4. שירותי מיקרו
Section titled “4. שירותי מיקרו”לא רלוונטי - מורכב מדי לעידן אירוח משותף
החלטות קשורות
Section titled “החלטות קשורות”- ADR-002: גישה למסד נתונים מונחה עצמים
- ADR-003: מנוע תבנית Smarty
- ADR-005: מערכת הרשאות
הפניות
Section titled “הפניות”- XOOPS היסטוריית פרויקטים
- PHP דפוסי ארכיטקטורת יישומים
- CMS מחקרי השוואה (2001-2005)
#xoops #architecture #adr #modules #design-decision