Shiroganari
@Shiroganari
Fullstack Junior Developer

Как правильно организовать архитектуру сервисов в Angular?

У меня есть сервис entity.service.ts, в котором лежат функции для отправления HTTP запросов на API.
Есть необходимость делать комбинированные запросы. То есть прежде, чем отправить какой-то POST запрос на создание сущности, мне для начала нужно отправить GET запрос, чтобы проверить, не существует ли уже подобной сущности.
Вот, например, функция:
createNewEntity(colleague: Colleague): void {
    const entityData = this.formColleagueEntityData(colleague);

    this.entityService.getEntity(colleague.uuid)
      .pipe(
        filter(entity => entity === null),
        switchMap(() => this.entityService.createNewEntity(entityData)),
        takeUntil(this.ngUnsubscribe)
      )
      .subscribe();
  }


Эту функцию, которая вызывает две другие функции сервиса entity, мне нужно использовать во многих компонентах.
Где правильнее всего расположить эту и другие подобные "комбинированные" функции, чтобы не копипастить их в каждый компонент? То есть по факту это всё относится непосредственное к сервису entity, но при этом я не думаю, что будет уместно пихать эту функцию в этот сервис, так как в этом сервисе все функции возвращают Observable, в то время как эта "комбинированная" функция подписывается на эти Observable.
  • Вопрос задан
  • 54 просмотра
Решения вопроса 1
Xuxicheta
@Xuxicheta Куратор тега Angular
инженер
https://refactoring.guru/ru/design-patterns/mediator

Если гет и пост относятся к одной сущности, то можно засунуть их в тот же entity.service.ts. Если в нем стало слишком много таких методов, то можно вынести в entity-mediator.service.ts. Ну или как то похоже.
Если к разным доменам, то создается отдельный сервис, относящийся уже к области в которой он вызывается. Т.е. к потребителю. И там уже обращаешься к ентити-сервисам.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы