Struktur Direktori NexaUI Framework

Pengenalan

Struktur direktori NexaUI dirancang untuk memberikan organisasi yang jelas dan pemisahan tanggung jawab sesuai dengan prinsip-prinsip arsitektur modern. Memahami struktur ini sangat penting untuk dapat bekerja secara efektif dengan framework.

Struktur Direktori Utama

Berikut adalah struktur direktori utama dari aplikasi NexaUI standar:

project-root/
├── assets/            # File statis (CSS, JS, gambar)
├── controllers/       # Controller aplikasi
├── models/            # Model dan repository
├── routes/            # Definisi route
├── system/            # Core framework
├── templates/         # View templates
├── vendor/            # Dependensi Composer
├── .env               # Konfigurasi lingkungan
├── .env.example       # Template konfigurasi
├── composer.json      # Definisi dependensi
└── index.php          # Entry point aplikasi

Direktori Utama

assets/

Direktori ini berisi semua file statis yang digunakan oleh aplikasi:

assets/
├── css/               # File CSS
│   ├── style.css
│   └── desktop.combined.min.css
├── js/                # File JavaScript
│   ├── ajax-handler.js
│   └── desktop.combined.min.js
├── images/            # Gambar
│   ├── favicon.ico
│   └── cover.png
└── fonts/             # Font

controllers/

Direktori ini berisi semua controller yang menangani request HTTP:

controllers/
├── Admin/             # Controllers untuk area admin
│   ├── AccessController.php
│   └── AccountController.php
├── AdminController.php # Base controller untuk admin
├── Api/               # Controllers untuk API
├── ApiController.php  # Base controller untuk API
├── Frontend/          # Controllers untuk frontend
│   ├── AboutController.php
│   └── BlogController.php
└── FrontendController.php # Base controller untuk frontend

models/

Direktori ini berisi model dan repository yang merepresentasikan data dan logika bisnis:

models/
├── Domain/            # Entities domain
│   ├── NexaAuthEntity.php
│   └── NexaUserEntity.php
├── Repositories/      # Repository untuk akses data
│   ├── NexaAuthRepository.php
│   ├── NexaProductRepository.php
│   └── NexaUserRepository.php
└── Role/              # Model untuk manajemen role
    ├── Control.php
    ├── Package.php
    └── Select.php

routes/

Direktori ini berisi definisi route yang menghubungkan URL dengan controller:

routes/
├── api.php            # Route untuk API
└── web.php            # Route untuk web

system/

Direktori ini berisi core framework dan komponen-komponen sistem:

system/
├── components/        # Komponen reusable
│   ├── NexaAvatar.php
│   ├── NexaJsonViewer.php
│   └── NexaPagination.php
├── Contracts/         # Interface dan kontrak
│   └── NexaRepositoryInterface.php
├── Dom/               # DOM handling
│   ├── NexaDom.php
│   └── NexaDomDev.php
├── Domain/            # Base domain classes
│   ├── NexaEntity.php
│   └── NexaValueObject.php
├── Events/            # Event handling
├── Helpers/           # Helper functions
├── log/               # Log files
├── Nexa.php           # Core framework class
├── NexaBootstrap.php  # Bootstrap aplikasi
├── NexaController.php # Base controller
├── Repositories/      # Base repositories
├── Services/          # Services
└── Storage/           # File storage

templates/

Direktori ini berisi template view untuk rendering HTML:

templates/
├── 404.html           # Error page
├── dashboard/         # Admin dashboard templates
├── index.html         # Main layout
├── mobile/            # Mobile-specific templates
├── tablet/            # Tablet-specific templates
└── theme/             # Theme components
    ├── header.html
    ├── footer.html
    └── menu.html

vendor/

Direktori ini berisi semua dependensi pihak ketiga yang diinstal melalui Composer. Direktori ini dikelola secara otomatis oleh Composer dan tidak boleh dimodifikasi secara manual.

File Utama

index.php

File ini adalah entry point utama aplikasi yang menginisialisasi semua komponen framework dan menjalankan aplikasi:

// Load Composer autoloader
require_once __DIR__ . '/vendor/autoload.php';

// Import core classes
use App\System\Nexa;
use App\System\Helpers\NexaDebug;

try {
    // Initialize Nexa
    $nexa = Nexa::getInstance();
    
    // Initialize debug system
    NexaDebug::init();
    NexaDebug::setErrorHandler();   
    
    // Initialize architectural patterns
    \App\System\NexaBootstrap::initialize();
    
    // Run the application
    $nexa->Tatiye()->run();
} catch (Exception $e) {
    // Handle errors
}

.env

File ini berisi konfigurasi lingkungan seperti koneksi database, URL aplikasi, dan mode debug:

# Application
APP_NAME=NexaUI
APP_ENV=development
APP_DEBUG=true
APP_URL=http://localhost

# Database
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=nexaui
DB_USERNAME=root
DB_PASSWORD=secret

composer.json

File ini mendefinisikan dependensi proyek dan konfigurasi autoloading:

{
    "name": "nexaui/framework",
    "description": "Modern PHP Framework dengan Template Engine yang powerful",
    "type": "project",
    "require": {
        "php": "^7.4|^8.0",
        "vlucas/phpdotenv": "^5.3"
    },
    "autoload": {
        "psr-4": {
            "App\\": "./"
        }
    }
}

Konvensi Penamaan

NexaUI mengikuti konvensi penamaan berikut:

  • Controllers: Nama kelas diakhiri dengan Controller (contoh: UserController)
  • Models: Nama kelas sesuai dengan entitas yang direpresentasikan (contoh: User)
  • Repositories: Nama kelas diakhiri dengan Repository (contoh: UserRepository)
  • Entities: Nama kelas diakhiri dengan Entity (contoh: UserEntity)
  • Templates: File menggunakan ekstensi .html dan mengikuti struktur direktori yang sesuai dengan controller

Praktik Terbaik

  • Ikuti struktur direktori yang ada untuk memudahkan navigasi dan pemeliharaan
  • Gunakan namespace yang sesuai dengan struktur direktori
  • Pisahkan kode berdasarkan tanggung jawabnya (separation of concerns)
  • Jangan memodifikasi file di direktori vendor/
  • Gunakan direktori system/ hanya untuk komponen core framework
  • Tempatkan kode spesifik aplikasi di direktori yang sesuai (controllers/, models/, dll.)