Dependency Inversion Principle (DIP)

Założenie: Zrozumieć i zaimplementować zasadę odwrócenia zależności (DIP) w PHP, aby stworzyć luźno sprzęgnięty kod.

Krok po kroku:

  1. Zły przykład – silne sprzężenie: Załóżmy, że mamy klasę `EmailSender` wysyłającą emaile za pomocą funkcji `mail()`. Klasa `OrderProcessor` bezpośrednio zależy od `EmailSender`.
  2. 
    class EmailSender {
      public function sendEmail(string $to, string $subject, string $message): void {
        mail($to, $subject, $message);
      }
    }
    
    class OrderProcessor {
      private EmailSender $emailSender;
    
      public function __construct(EmailSender $emailSender) {
        $this->emailSender = $emailSender;
      }
    
      public function processOrder(): void {
        // ... przetwarzanie zamówienia ...
        $this->emailSender->sendEmail('user@example.com', 'Zamówienie', 'Twoje zamówienie zostało złożone.');
      }
    }
    
    $emailSender = new EmailSender();
    $orderProcessor = new OrderProcessor($emailSender);
    $orderProcessor->processOrder();
    				
  3. Wprowadzenie abstrakcji: Stwórzmy interfejs `EmailService` definiujący metodę wysyłania emaili.
  4. 
    interface EmailService {
      public function sendEmail(string $to, string $subject, string $message): void;
    }
    				
  5. Implementacja interfejsu: `EmailSender` implementuje teraz `EmailService`.
  6. 
    class EmailSender implements EmailService {
      public function sendEmail(string $to, string $subject, string $message): void {
        mail($to, $subject, $message);
      }
    }
    				
  7. Zmiana `OrderProcessor`: `OrderProcessor` teraz zależy od `EmailService`, a nie od konkretnej implementacji.
  8. 
    class OrderProcessor {
      private EmailService $emailService;
    
      public function __construct(EmailService $emailService) {
        $this->emailService = $emailService;
      }
    
      public function processOrder(): void {
        // ... przetwarzanie zamówienia ...
        $this->emailService->sendEmail('user@example.com', 'Zamówienie', 'Twoje zamówienie zostało złożone.');
      }
    }
    				
  9. Testowanie: Możemy teraz łatwo testować `OrderProcessor` z mockową implementacją `EmailService`.

Podsumowanie: Ten przykład pokazuje, jak zastosować zasadę DIP, aby stworzyć bardziej elastyczny i testowalny kod. Zachęcamy do dalszego zgłębiania tematu programowania obiektowego w PHP!

Dodaj komentarz 0

Your email address will not be published. Required fields are marked *