Data service для работы с API в AngularJS
Я много думал о службах для работы с данными и этот аспект Ангуляра, вызывает у меня наибольшее беспокойство. С тех пор я понял, что мое беспокойство было вызвано всего-лишь тем, что Angular.js не диктует и даже не советует как лучше управлять вашей работой с данными.
В итоге, при работе с данными я всегда сомневаюсь в своем решении и спрашиваю себя: «Все ли я делаю правильно?» Ответ на этот вопрос прост: если решение работает для тебя, тогда оно верно, так как Ангуляру все равно. Этот подход работал до сих пор, но он приводил к захламлению кода, которой, в итоге, было сложно перемещать в другие проекты.
Итак, мы вернулись обратно к доске для проектирования и начали думать.
После чтения разных постов и просматривания видео о моделировании данных в ангуляре, многие решения все еще казались для меня громоздкими. Я не уверен, что мы создали идеальное решение, но оно хорошо работает для наших нужд и кажется вполне приличным подходом, которого не стоит бояться. Я решил опубликовать код для всех, кто чувствовал себя так же по отношению к проблеме дата менеджмента в ангуляре.
##services.js
Это основной сервис, который мы используем. Он позволяет нам внедрять один модуль в наше приложение, чтобы прикреплять все требуемые сервисы для взаимодействия с Mallzee API. Классная вещь заключается в том, что это позволяет нам создать вызовы API для каждого сервиса, который расширяет его и позволяет поддерживать наш код не повторяющимся (DRY).
Мы можем создать много общих вызовов к данными именно здесь, таких как fetch
, fetchOne
, query
и тд. Основным двигателем этого подхода стало то, что мы повторялись в написании кода для слияния кеша в наших сервисах. Мы хотим иметь возможность получать наши данные сначала из LocalStorage
, потом делать запрос для получения “живых” данных и обновлять любые изменения. Подробнее об этом в другом посте. Эта техника позволяет нам делать это единожды в наших общих вызовах.
Мы так же создаем провайдер так, чтобы этот сервис и использование модуля restangular
могло быть соединено с другими сервисами без возникновения проблем с базовым URL и тому подобных вещей.
|
|
##services/brands.js
Когда мы создаем наш сервис, мы просто внедряем наш базовый сервис MallzeeService и расширяем его экземпляр, чтобы обеспечить нас АПИ.
Мы используем factory для того, чтобы придавать возвращающимся элементами структуру модели, и фактори - это идеальное место, чтобы расположить здесь бизнес логику и не допускать ее до контроллеров.
|
|
##controllers/brands.js
Затем мы можем использовать ее очень просто в наших контроллерах.
|
|
##app.js
Наконец мы всего лишь включаем высокоуровневый сервис и настраиваем его, если мы хотим указать на другой URL, скажем, во время разработки.
|
|
Мне это нравится, потому что мы можем использовать этот код в любом проекте на Ангуляре и чувствовать себя комфортно, зная, что наши обращения к апи останутся стабильными. Он так же настроен для хорошей работы с вашим кешем и localStorage.
Мне бы очень хотелось услышать, что вы думаете по этому поводу.