Хабр Курсы для всех
РЕКЛАМА
Большая витрина: от крупнейших школ до частных авторов. Сравнивайте по цене, длительности, формату и выбирайте самый подходящий курс!
Помимо внедрения зависимостей, библиотеки (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