Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Помимо внедрения зависимостей, библиотеки (dm.js не исключение) часто реализуют и другой вид инверсии управления, известный как паттерн Сервис Локатор. При таком подходе зависимости не только внедряются в сервис, но и сам сервис может запрашивать объекты у IoC контейнера, который выполняет роль локатора сервисов.
Однако, в контексте веб-разработки в браузере, использовать паттерн Сервис Локатор в целях оптимизации оправданно — ведь далеко не всегда нужно загружать сразу все сервисы приложения и грузить тем самым много килобайт кода.
var locator, mapService, serviceLocator;
//Создаем Сервис Локатор
serviceLocator = new ServiceLocator();
// Создадим Картографа
mapService = new MapService({
token: "my-application-token"
});
// Создадим Локатор
locator = new Locator();
// Вндерим зависимость Локатора при помощи Сервис Локатора
locator.setMapService(serviceLocator.getMapService());
// Вызовем метод локации
locator.locateUsers(users);
Простыми словами мы заменяем зависимость от конкретных сервисов на зависимость от Сервис Локатора. При этом он сам по себе должен быть легко переносимым.
Но тогда нам придется инициализацию каждого плагина привязать к Сервис Локатору, хотя вызываемые у него сервисы могут быть использованы лишь несколькими методами плагина, а они могут не использоваться в данном приложении. И получается, что обязательная зависимость от Локатора для идеального плагина — лишняя.
var config = {
logger: 'myApp/myLogger'
}
define('myApp/myModule', [config.logger], function(logger) {
...
})
<users-map provider="google"></users-map>
new UsersMap({options});dm.get("cache").then(function(cacheService) {
cacheService.store("my_key", {my_data: 1});
});
Dependency Injection. JavaScript