2016-04-21 3 views
2

В чем разница с модуляцией кода javascript (с помощью браузера на примере) и инъекцией зависимостей?Разница между javascript-модуляцией и зависимостью Injection

Являются ли они синонимами? Соединяются ли эти два? Или я пропустил какой-то момент?

+0

Вы просмотрели https://en.wikipedia.org/wiki/Module_(disambiguation)#Computing_and_engineering и https://en.wikipedia.org/wiki/Dependency_injection? – Bergi

ответ

1

Модуляция относится к разрыву кода в отдельные независимые «пакеты».
Включение зависимостей означает не ссылки на жесткие коды других модулей.

В качестве практического примера, вы можете написать модули, которые не используют инъекции зависимостей:

import { Foo } from 'foo'; 

export function Bar() { 
    return Foo.baz(); 
} 

Здесь у вас есть два модулей, но этот модуль импортирует специфический другой жёстко~d прописанного модуля.

тот же модуль, написанный с использованием инъекции зависимостей:

export function Bar(foo) { 
    return foo.baz(); 
} 

Тогда кто-то может использовать это как:

import { Foo } from 'foo'; 
import { Bar } from 'bar'; 

Bar(Foo()); 

Вы впрыскивать Foo зависимости во время вызова, вместо того, чтобы жестко прописывать зависимость ,

1

Вы можете передать этот article:

модули представляют собой фрагменты кода, которые реализуют определенную функциональность и написаны с использованием конкретных методов. На языке JavaScript отсутствует схема модуляции . Предстоящая спецификация ECMAScript 6 имеет тенденцию разрешать это, введя концепцию модуля на языке JavaScript. Это будущее.

и Dependency injection in JavaScript

Цель

Давайте предположим, что у нас есть два модуля. Первый - это служба, которая делает запросы Ajax, а вторая - маршрутизатором.

var service = function() { 
    return { name: 'Service' }; 
} 
var router = function() { 
    return { name: 'Router' }; 
} 

У нас есть еще одна функция, которая нуждается в этих модулях.

var doSomething = function(other) { 
    var s = service(); 
    var r = router(); 
}; 

И сделать вещи немного более интересной функции необходимо принять еще один параметр. Конечно, мы могли бы использовать приведенный выше код, , но это не очень гибко. Что делать, если мы хотим использовать ServiceXML или ServiceJSON. Или что делать, если мы хотим создать некоторые из модулей для целей тестирования . Мы не можем просто отредактировать тело функции. Первое, что мы все придумали, - это передать зависимостям параметры функции. Т.е .:

var doSomething = function(service, router, other) { 
    var s = service(); 
    var r = router(); 
}; 

Делая это, мы проходим точное выполнение модуля , который мы хотим. Однако это создает новую проблему. Представьте, если у нас есть doSomething по всему нашему коду. Что произойдет, если нам понадобится третья зависимость . Мы не можем редактировать все вызовы функции. Итак, нам нужен инструмент , который сделает это для нас. Это то, что пытаются спросить инжекторы .Давайте записать несколько целей, которые мы хотим достижения:

  • мы должны иметь возможность зарегистрировать зависимости
  • инжектор должен принять функцию и должен возвращать функцию, которая каким-то образом получает необходимые ресурсы
  • мы должны не писать много, нам нужен короткий и приятный синтаксис
  • инжектор должен держать объем переданной функции
  • переданной функцию должна быть в состоянии принимать собственные аргументы, а не только описанные зависимости

Прекрасный список не так ли. Давайте погрузимся.

Смежные вопросы