Архитектура Angular 2 — место для общих сервисов через модули

Я читал об архитектуре некоторых проектов Angular 2, но это не мой случай.

Мой вопрос заключается в том, где разместить общий сервис, который используется в модулях.

В моем проекте несколько модулей, например: admin module и user module.

Это структура:

app |admin | |- some admin components | |- admin.module |user | |- some user components | |- shared | |- user.service | |- user.module

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

Я думаю, что это не очень хорошая практика.

Я нашел это: http://jasonwatmore.com/post/2016/08/16/angular-2-jwt-authentication-example-tutorial Но я не знаю, хорошая ли это практика. Должен ли я поместить user.service в app/_services для общего пользования? Должен ли я создать services.module для инициализации user.service, а затем импортировать сервисный модуль в другой модуль?

app |_services | |- user.service |admin | |- some admin components | |- admin.module - import and set user.service to provider |user | |- some user components | |- user.module - import and set user.service to provider `


person Hung Vi    schedule 10.05.2017    source источник
comment
Создайте еще один модуль... что-то вроде SharedModule, затем поместите туда общие компоненты/сервисы/классы. Чтобы использовать его, вам просто нужно импортировать модуль внутри UserModule, а также AdminModule.   -  person developer033    schedule 10.05.2017
comment
NgModule — такая плохо спроектированная, ненужная и запутанная абстракция.   -  person Aluan Haddad    schedule 10.05.2017
comment
@ developer033, как сказал Eeks33; в этом случае все мои модули тесно связаны с SharedModule. У меня тоже есть SharedModule, но он используется для другой цели. Мой SharedModule содержит некоторые общие компоненты, директивы, классы, такие как form-group, paging, tree-view..., которые повторно используются в нескольких модулях. Спасибо за ваше предложение.   -  person Hung Vi    schedule 10.05.2017


Ответы (1)


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

Держите все пользовательские службы и пользовательские компоненты внутри пользователя, не помещайте пользовательские службы в общую папку служб. Это самая масштабируемая архитектура. Это называется «папка по функциям» или «единая ответственность». Если вы создадите «общую» папку, в которую вы просто вставите службы из всех своих модулей, вскоре эта папка станет огромной, и все части вашего приложения будут зависеть от этой папки, тесно связывая все ваше приложение.

См. официальное руководство по стилю angular2 от Джона Папы, которое выступает за единую ответственность: https://angular.io/docs/ts/latest/guide/style-guide.html

person Eeks33    schedule 10.05.2017
comment
Спасибо за ваше предложение! Вы спасли мой день. - person Hung Vi; 10.05.2017