Mejores prácticas de organización del código
Mejores prácticas de organización del código en XOOPS
Sección titulada «Mejores prácticas de organización del código en XOOPS»La organización adecuada del código es esencial para la mantenibilidad, escalabilidad y colaboración en equipo.
Module Directory Structure
Sección titulada «Module Directory Structure»A well-organized XOOPS module should follow this structure:
mymodule/├── xoops_version.php # Module metadata├── index.php # Frontend entry point├── admin.php # Admin entry point├── class/│ ├── Controller/ # Request handlers│ ├── Handler/ # Data handlers│ ├── Repository/ # Data access│ ├── Entity/ # Domain objects│ ├── Service/ # Business logic│ ├── DTO/ # Data transfer objects│ └── Exception/ # Custom exceptions├── templates/ # Smarty templates│ ├── admin/ # Admin templates│ └── blocks/ # Block templates├── assets/│ ├── css/ # Stylesheets│ ├── js/ # JavaScript│ └── images/ # Images├── sql/ # Database schemas├── tests/ # Unit and integration tests├── docs/ # Documentation└── composer.json # Composer configurationNaming Conventions
Sección titulada «Naming Conventions»PHP Naming Standards (PSR-12)
Sección titulada «PHP Naming Standards (PSR-12)»Classes: PascalCase (UserController, PostRepository)Methods: camelCase (getUserById, createUser)Properties: camelCase ($userId, $username)Constants: UPPER_SNAKE_CASE (DEFAULT_LIMIT, MAX_USERS)Functions: snake_case (get_user_data, validate_email)Files: PascalCase.php (UserController.php)File and Directory Organization
Sección titulada «File and Directory Organization»- One class per file
- Filename matches class name
- Directory structure matches namespace hierarchy
- Keep related classes together
- Use consistent naming across module
PSR-4 Autoloading
Sección titulada «PSR-4 Autoloading»Composer Configuration
Sección titulada «Composer Configuration»{ "autoload": { "psr-4": { "Xoops\\Module\\Mymodule\\": "class/" } }}Manual Autoloader
Sección titulada «Manual Autoloader»<?phpclass Autoloader{ public static function register() { spl_autoload_register([self::class, 'autoload']); }
public static function autoload($class) { $prefix = 'Xoops\\Module\\Mymodule\\'; if (strpos($class, $prefix) !== 0) { return; }
$relative = substr($class, strlen($prefix)); $file = __DIR__ . '/' . str_replace('\\', '/', $relative) . '.php';
if (file_exists($file)) { require $file; } }}?>Best Practices
Sección titulada «Best Practices»1. Single Responsibility
Sección titulada «1. Single Responsibility»- Each class should have one reason to change
- Separate concerns into different classes
- Keep classes focused and cohesive
2. Consistent Naming
Sección titulada «2. Consistent Naming»- Use meaningful, descriptive names
- Follow PSR-12 coding standards
- Avoid abbreviations unless obvious
- Use consistent patterns
3. Directory Organization
Sección titulada «3. Directory Organization»- Group related classes together
- Separate concerns into subdirectories
- Keep templates and assets organized
- Use consistent file naming
4. Namespace Usage
Sección titulada «4. Namespace Usage»- Use proper namespaces for all classes
- Follow PSR-4 autoloading
- Namespace matches directory structure
5. Configuration Management
Sección titulada «5. Configuration Management»- Centralize configuration in config directory
- Use environment-based configuration
- Don’t hardcode settings
Module Bootstrap
Sección titulada «Module Bootstrap»<?phpclass Bootstrap{ private static $serviceContainer; private static $initialized = false;
public static function initialize() { if (self::$initialized) { return; }
global $xoopsDB; self::$serviceContainer = new ServiceContainer($xoopsDB); self::$initialized = true; }
public static function getServiceContainer() { if (!self::$initialized) { self::initialize(); } return self::$serviceContainer; }}?>Related Documentation
Sección titulada «Related Documentation»See also:
- Error-Handling for exception management
- Testing for test organization
- ../Patterns/MVC-Pattern for controller structure
Tags: #best-practices #code-organization #psr-4 #module-development