Logowanie z użyciem fasad (np. uproszczenie dostępu do logera)
Założenie: Uprościć dostęp do funkcji logowania w aplikacji PHP za pomocą wzorca fasady.
Krok po kroku:
- Stworzenie interfejsu Loggera: Definiujemy interfejs, który będzie określał metody logowania.
- Implementacja Loggera (np. plikowy): Tworzymy klasę implementującą interfejs, która zapisuje logi do pliku.
- Stworzenie Fasady: Tworzymy klasę fasady, która udostępnia uproszczony interfejs do logowania.
- Użycie Fasady: W aplikacji używamy fasady do logowania.
interface LoggerInterface {
public function log(string $message, string $level = 'info'): void;
}
Ten kod definiuje interfejs LoggerInterface
z metodą log()
, która przyjmuje wiadomość i poziom logowania (opcjonalnie).
class FileLogger implements LoggerInterface {
private string $filePath;
public function __construct(string $filePath) {
$this->filePath = $filePath;
}
public function log(string $message, string $level = 'info'): void {
$logMessage = date('Y-m-d H:i:s') . " [$level] $message\n";
file_put_contents($this->filePath, $logMessage, FILE_APPEND);
}
}
Klasa FileLogger
zapisuje wiadomości do pliku określonego w konstruktorze. Dodaje datę, poziom i treść wiadomości.
class LoggerFacade {
private LoggerInterface $logger;
public function __construct(LoggerInterface $logger) {
$this->logger = $logger;
}
public function logInfo(string $message): void {
$this->logger->log($message, 'info');
}
public function logError(string $message): void {
$this->logger->log($message, 'error');
}
// ... inne metody dla różnych poziomów logowania
}
Fasada LoggerFacade
ukrywa złożoność implementacji logera, oferując proste metody logInfo
i logError
.
$logger = new FileLogger('log.txt');
$facade = new LoggerFacade($logger);
$facade->logInfo('Użytkownik zalogował się.');
$facade->logError('Wystąpił błąd.');
Ten kod pokazuje, jak łatwo używać fasady do logowania różnych typów wiadomości.
Ten przykład pokazuje, jak użyć wzorca fasady do uproszczenia dostępu do logera. Zachęcamy do dalszego zgłębiania tematu wzorców projektowych w PHP!