Интерфейсы для инъекционных сервисов в AngularJS

Я новичок в AngularJS. Из того, что я понимаю, весь смысл внедрения зависимости состоит в том, что зависимость может быть легко заменена на "похожую" зависимость позже, и код все еще работает так же. С "похожим" обычно подразумевается, что зависимость реализует некоторый интерфейс.

Если я пишу контроллер, а мой коллега пишет сервис, который я собираюсь использовать в своем контроллере, как я могу убедиться, что сервис, который он делает для меня, имеет все, что мне нужно? На традиционном языке ОО его сервисом будет класс, реализующий интерфейс, который заставит его реализовать определенные методы. Но как это можно сделать в angularJS? Должен ли я проверить, есть ли у службы свойства для всех методов, которые я хочу, и __proto__ для всех этих свойств Function.prototype? И чтобы проверить, что возвращают эти методы, я должен вызвать их с фиктивными объектами и затем проверить возвращенный объект? Или есть лучший рекомендуемый способ сделать это?

1 ответ

Решение

Это может быть особенностью DI, но суть в том, чтобы иметь возможность видеть, откуда исходят ваши зависимости, а не их расположение в каком-то волшебном глобальном подобном окне.

У JavaScript нет неявного способа реализации интерфейсов. Ваш коллега создаст либо сервис, либо фабрику, которая предоставляет объекту функции и свойства, связанные с ним. Опять же, эти функции могут возвращать все, что угодно, и у вас нет средств для обеспечения того, что они возвращают.

Если вы хотите убедиться, что ваш коллега возвращает то, что вы ожидаете, было бы неплохо написать модульные тесты и использовать ngMock.

Кроме того, прикрепить к prototype и не __proto__,

Другие вопросы по тегам