Wiązanie (coupling)

Założenie: Przedstawimy dwa przykłady klas w PHP: jeden z wysokim, a drugi z niskim poziomem wiązania (coupling).

Krok po kroku:

  1. Przykład 1: Wysoki coupling

    Stwórzmy dwie klasy, gdzie klasa `Database` jest bezpośrednio używana w klasie `User`.

    
    class Database {
      public function getUser($id) {
        // Pobiera użytkownika z bazy danych
        return ['id' => $id, 'name' => 'Jan Kowalski'];
      }
    }
    
    class User {
      private $database;
    
      public function __construct(Database $database) {
        $this->database = $database;
      }
    
      public function getName($id) {
        $user = $this->database->getUser($id);
        return $user['name'];
      }
    }
    
    $db = new Database();
    $user = new User($db);
    echo $user->getName(1); // Wyświetli: Jan Kowalski
    					

    W tym przykładzie klasa `User` jest silnie powiązana z klasą `Database`. Zmiana w `Database` może wymagać modyfikacji `User`.

  2. Przykład 2: Niski coupling

    Teraz użyjemy interfejsu, aby zmniejszyć coupling.

    
    interface UserDataProvider {
      public function getUser($id);
    }
    
    class Database implements UserDataProvider {
      public function getUser($id) {
        return ['id' => $id, 'name' => 'Jan Kowalski'];
      }
    }
    
    class User {
      private $userDataProvider;
    
      public function __construct(UserDataProvider $userDataProvider) {
        $this->userDataProvider = $userDataProvider;
      }
    
      public function getName($id) {
        $user = $this->userDataProvider->getUser($id);
        return $user['name'];
      }
    }
    
    $db = new Database();
    $user = new User($db);
    echo $user->getName(1); // Wyświetli: Jan Kowalski
    					

    Teraz klasa `User` zależy od interfejsu `UserDataProvider`, a nie bezpośrednio od `Database`. Możemy łatwo podmienić implementację (np. na `MockDatabase` w testach) bez zmiany kodu w `User`.

Ten przykład pokazuje podstawy wiązania w programowaniu obiektowym. Zachęcamy do dalszego zgłębiania tego tematu, aby pisać bardziej elastyczny i łatwy w utrzymaniu kod.

Dodaj komentarz 0

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