Beste praktijken voor foutafhandeling
Best practices voor foutafhandeling in XOOPS
Section titled “Best practices voor foutafhandeling in XOOPS”Een goede foutafhandeling is van cruciaal belang voor de betrouwbaarheid van applicaties, foutopsporing en gebruikerservaring.
Uitzonderingshiërarchie
Section titled “Uitzonderingshiërarchie”<?php// Base exceptionclass ModuleException extends \Exception{ protected $statusCode = 500;
public function __construct($message = '', $code = 0, $statusCode = 500) { parent::__construct($message, $code); $this->statusCode = $statusCode; }
public function getStatusCode() { return $this->statusCode; }}
// Specific exceptionsclass ValidationException extends ModuleException{ protected $statusCode = 400; private $errors = [];
public function __construct($message, $errors = []) { parent::__construct($message, 0, 400); $this->errors = $errors; }
public function getErrors() { return $this->errors; }}
class NotFoundException extends ModuleException{ protected $statusCode = 404;}
class UnauthorizedException extends ModuleException{ protected $statusCode = 403;}?>Try-Catch-patronen
Section titled “Try-Catch-patronen”<?phpclass UserService{ public function createUser($username, $email, $password) { try { // Validate $this->validate($username, $email, $password);
// Create user $user = new User(); $user->setUsername($username); $user->setEmail($email); $user->setPassword($password);
// Save $userId = $this->userRepository->save($user);
return $userId;
} catch (ValidationException $e) { \xoops_logger()->error($e->getMessage()); throw $e;
} catch (\Exception $e) { \xoops_logger()->critical($e->getMessage()); throw new \RuntimeException('Failed to create user'); } }}?>Logboekfouten
Section titled “Logboekfouten”<?phpclass ErrorHandler{ public static function logError($message, $context = []) { \xoops_logger()->error($message, $context); }
public static function logException(\Exception $e) { $context = [ 'exception' => get_class($e), 'file' => $e->getFile(), 'line' => $e->getLine(), 'trace' => $e->getTraceAsString(), ];
\xoops_logger()->critical($e->getMessage(), $context); }}?>Gebruiksvriendelijke foutmeldingen
Section titled “Gebruiksvriendelijke foutmeldingen”<?phpclass ErrorHandler{ public static function getUserMessage(\Exception $e) { switch (true) { case $e instanceof ValidationException: return $e->getMessage();
case $e instanceof NotFoundException: return 'The requested resource was not found.';
case $e instanceof UnauthorizedException: return 'You do not have permission.';
default: return 'An unexpected error occurred.'; } }
public static function getStatusCode(\Exception $e) { if (method_exists($e, 'getStatusCode')) { return $e->getStatusCode(); } return 500; }}?>Afhandeling van controllerfouten
Section titled “Afhandeling van controllerfouten”<?phpclass UserController{ public function registerAction() { try { if ($_SERVER['REQUEST_METHOD'] !== 'POST') { return []; }
$userId = $this->userService->register( $_POST['username'], $_POST['email'], $_POST['password'] );
return ['success' => true, 'userId' => $userId];
} catch (\Exception $e) { ErrorHandler::logException($e);
return [ 'success' => false, 'message' => ErrorHandler::getUserMessage($e), 'statusCode' => ErrorHandler::getStatusCode($e), ]; } }}?>Beste praktijken
Section titled “Beste praktijken”- Maak specifieke uitzonderingstypen
- Vroeg gooien, laat vangen
- Registreer alle uitzonderingen met context
- Zorg voor gebruiksvriendelijke berichten
- Gebruik een consistent foutreactieformaat
- Test foutafhandelingspaden
- Stel geen gevoelige informatie bloot aan gebruikers
Gerelateerde documentatie
Section titled “Gerelateerde documentatie”Zie ook:
- Code-organisatie voor projectstructuur
- Testen voor foutteststrategieën
- ../Patterns/Service-Layer voor service-uitzonderingen
Tags: #best-practices #error-handling #exceptions #logging #module-ontwikkeling