Info
Відкрити сторінку на телефоні

Різниця між Service Locator та Dependency Injection?

Різниця між Service Locator та Dependency Injection полягає в тому, як об'єкти отримують свої залежності. У Service Locator, об'єкти самостійно шукають потрібні залежності у спеціалізованому контейнері, тоді як у Dependency Injection, залежності передаються об'єкту ззовні. Давайте розглянемо приклад на PHP:

                        
class ServiceLocator {
    private $services = [];

    public function __construct() {
        // Реєструємо сервіси у контейнері
        $this->services['userService'] = function() {
            return new UserService();
        };
    }

    public function getService($serviceName) {
        if (isset($this->services[$serviceName])) {
            return $this->services[$serviceName]();
        }
        throw new Exception('Сервіс не знайдено.');
    }
}

class UserService {
    public function getUser() {
        return 'Користувач';
    }
}

$serviceLocator = new ServiceLocator();
$userService = $serviceLocator->getService('userService');
echo $userService->getUser(); // Виведе: Користувач
                        
                    

Приклад Dependency Injection на PHP:

                        
class UserService {
    public function getUser() {
        return 'Користувач';
    }
}

class UserController {
    private $userService;

    public function __construct(UserService $userService) {
        $this->userService = $userService;
    }

    public function showUser() {
        echo $this->userService->getUser();
    }
}

$userService = new UserService();
$userController = new UserController($userService);
$userController->showUser(); // Виведе: Користувач