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:
- 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`.
- 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.