Pular para o conteúdo

Boas Práticas de Organização de Código

Boas Práticas de Organização de Código em XOOPS

Seção intitulada “Boas Práticas de Organização de Código em XOOPS”

A organização adequada do código é essencial para manutenibilidade, escalabilidade e colaboração em equipe.

Um módulo XOOPS bem organizado deve seguir esta estrutura:

mymodule/
├── xoops_version.php # Metadados do módulo
├── index.php # Ponto de entrada do frontend
├── admin.php # Ponto de entrada do administrador
├── class/
│ ├── Controller/ # Manipuladores de requisição
│ ├── Handler/ # Manipuladores de dados
│ ├── Repository/ # Acesso a dados
│ ├── Entity/ # Objetos de domínio
│ ├── Service/ # Lógica de negócios
│ ├── DTO/ # Objetos de transferência de dados
│ └── Exception/ # Exceções personalizadas
├── templates/ # Templates Smarty
│ ├── admin/ # Templates de administrador
│ └── blocks/ # Templates de bloco
├── assets/
│ ├── css/ # Folhas de estilo
│ ├── js/ # JavaScript
│ └── images/ # Imagens
├── sql/ # Esquemas de banco de dados
├── tests/ # Testes unitários e integração
├── docs/ # Documentação
└── composer.json # Configuração do Composer
Classes: PascalCase (UserController, PostRepository)
Métodos: camelCase (getUserById, createUser)
Propriedades: camelCase ($userId, $username)
Constantes: UPPER_SNAKE_CASE (DEFAULT_LIMIT, MAX_USERS)
Funções: snake_case (get_user_data, validate_email)
Arquivos: PascalCase.php (UserController.php)
  • Uma classe por arquivo
  • Nome do arquivo corresponde ao nome da classe
  • Estrutura de diretório corresponde à hierarquia de namespace
  • Manter classes relacionadas juntas
  • Usar nomenclatura consistente em todo o módulo
{
"autoload": {
"psr-4": {
"Xoops\\Module\\Mymodule\\": "class/"
}
}
}
<?php
class 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;
}
}
}
?>
  • Cada classe deve ter um motivo para mudar
  • Separar preocupações em diferentes classes
  • Manter classes focadas e coesas
  • Usar nomes significativos e descritivos
  • Seguir padrões de codificação PSR-12
  • Evitar abreviações a menos que óbvias
  • Usar padrões consistentes
  • Agrupar classes relacionadas
  • Separar preocupações em subdiretórios
  • Manter templates e assets organizados
  • Usar nomeação de arquivo consistente
  • Usar namespaces apropriados para todas as classes
  • Seguir carregamento automático PSR-4
  • Namespace corresponde à estrutura de diretório
  • Centralizar configuração em diretório de configuração
  • Usar configuração baseada em ambiente
  • Não codificar configurações
<?php
class 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;
}
}
?>

Veja também:

  • Tratamento-de-Erros para gerenciamento de exceção
  • Testes para organização de testes
  • ../Padrões/Padrão-MVC para estrutura de controller

Tags: #boas-práticas #organização-de-código #psr-4 #desenvolvimento-de-módulo