Автор оригинала: FreeCodeCamp Community Member.
Ricardo Sousa.
В эти дни это довольно распространено для использования Инъекция зависимости , который позволяет модулям проектов быть свободно связанным. Но поскольку проекты растут в сложности, у нас есть астрономическое количество зависимостей для контроля.
Работать вокруг этой проблемы, мы часто обращаемся к контейнерам впрыска зависимостей. Но это необходимо в любой ситуации?
В этом посте я охвачу, как Параметры по умолчанию JavaScript Может помочь нам с этим вопросом. Для этого мы реализуем простое приложение в Node.js. У него будут функциональные возможности создания и чтения информации пользователей, используя три разных подхода:
- Без впрыска зависимости
- С инъекцией зависимости
- С впрысками зависимости и параметрами по умолчанию
Структура проекта
Мы составлении нашего примера проекта по признаку (Кстати – не структурируйте свои файлы вокруг ролей). Итак, структура будет что-то вроде этого:
├── users/│ ├── users-repository.js│ ├── users.js│ ├── users.spec.js│ ├── index.js├── app.js
Примечание : С целью этого примера мы сохраним информацию пользователя в памяти.
Без впрыска зависимости
Анализируя предыдущий код, мы подтверждаем, что мы ограничены утверждением: const ('./Пользователи-репозиторий')
в Пользователи Отказ Пользователи Модуль, с таким подходом, сильно связан с Пользователи-репозиторий.
Это ограничивает нас использовать реализацию другого репозитория без изменения требуется утверждение. Когда требуется Используется, мы создаем статическую зависимость к требуемому модулю. С этим мы не можем использовать другой репозиторий в модели приложения, кроме одной, определенной Пользователи-репозиторий модуль.
Кроме того, мы также связаны с Пользователи-репозиторий В Пользователи-спецификации из-за статической зависимости, упомянутой ранее. Эти модульные тесты предназначены для тестирования только Пользователи Модуль и ничего более. Представьте, что если репозиторий подключен к внешней базе данных. Мы должны были бы взаимодействовать с базой данных, чтобы иметь возможность проверить.
С инъекцией зависимости
С инъекцией зависимости, Пользователи Модуль больше не связан с Пользователи-репозиторий модуль.
Основное отличие от предыдущего подхода заключается в том, что теперь у нас нет статической зависимости в Пользователи Модуль (у нас нет утверждения: const ('./Пользователи-репозиторий')
). Вместо этого Пользователи Модуль экспортирует A Функция завода с параметром для хранилища. Это позволяет нам передавать любой репозиторий модуля на более высоком уровне.
Альтернатива на заводской функции состоит в том, чтобы добавить параметр для аргумента репозитория в функциях создать и читать Отказ Но если две функции зависят от того же репозитория, мы можем инкапсулировать их с функцией и воспользоваться преимуществами Закрытия JavaScript Отказ
Теперь в приложение Модуль, у нас есть свобода определить, какой репозиторий мы хотим использовать. Также посмотрите на тесты подразделения. Теперь мы можем проверить Пользователи Модуль, не беспокоясь о репозитории. Просто Макет это !
Однако, давайте честным – как часто мы определяем зависимости, которые изменяются на протяжении всего жизненного цикла приложения? Обычно мы стараемся избегать статических зависимостей, потому что он делает тестирование сложнее. Но сейчас, поскольку мы хотим для реализации, мы должны пройти экземпляр репозитория к Пользователи Модуль каждый раз, когда мы хотим использовать его.
Вы знаете, что было бы действительно потрясающе? Если бы мы смогли использовать модуль без необходимости придавать его репозиторий каждый раз. Мы можем сделать это в JavaScript с параметрами по умолчанию.
С впрысками зависимости и параметрами по умолчанию
С этой стратегией, в дополнение к инъекции зависимости, мы видели в предыдущем подходе, параметр, определенный в фабричной функции, экспортированной Пользователи Модуль теперь является параметром по умолчанию: usersRepo
Отказ
С помощью параметра по умолчанию, если мы не пройдем аргумент, значение параметра по умолчанию используется функцией. В противном случае используется значение аргумента. Это так же, как использование метода впрыска зависимостей, определенной в предыдущем подходе.
Теперь у нас снова есть статическая зависимость в Пользователи модуль. Однако эта статическая зависимость предназначена только для определения значения, используемого в параметре по умолчанию, если к заводской функции не передается аргумент.
С таким подходом мы не обязаны пройти репозиторий в приложение Модуль при требовании Пользователи модуль. Тем не менее, мы можем сделать это. Мы также можем проверить, что тесты подразделений могут продолжать использовать репозиторий MOCK, потому что мы можем пропустить его вместо того, чтобы использовать значение параметра по умолчанию.
Заключение
Параметры по умолчанию являются простой функцией JavaScript, но мощный. С ними мы можем реализовать лучшие решения.
Не стесняйтесь спрашивать меня что-нибудь.
Больше ресурсов
Репозиторий GitHub с примерами: здесь Отказ
Mattias Petter Йоханссон имеет отличное впрыскное видео.
Если вам понравилось эту статью, пожалуйста, дайте мне несколько хлопьев, чтобы все больше людей видят это. Спасибо!