Шаблоны проектирования NestJS + TypORM: распознаватель и сервис - PullRequest
0 голосов
/ 13 июня 2019

Я нашел множество примеров вложенных «примеров» приложений, но у каждого из них, похоже, немного разные мнения о шаблонах проектирования.В настоящее время меня интересует, где работа по подготовке объекта должна идти между распознавателем и службой в сочетании с TypeORM.

например:

comment.resolver.ts:

/********************
 * @MUTATION
 *********************/

/**
 *
 * @param payload
 * @param args
 */
@Mutation('createComment')
async create(@CurrentUser() payload: JwtPayload, @Args('input') args: CreateCommentInputDto): Promise < CommentEntity > {
  const currentUser = await this.userService.getCurrentUser(payload);
  const initComment = new CommentEntity();
  const newComment: CommentEntity = {
    ...args,
    createdBy: currentUser,
    createdDate: new Date(),
    modifiedDate: new Date(),
    ...initComment,
  };
  const createdComment = await this.commentService.create(newComment);
  pubSub.publish('CommentCreated', {
    CommentCreated: createdComment
  });
  return createdComment;
}

comment.service.ts:

/**
 *
 * @param comment
 */
async create(comment: CommentEntity): Promise < CommentEntity > {
  return await this.CommentsRepository.save(comment);
}

т.е.

  • Создать новый пустой комментарий. Entity
  • Добавить значения полей, которые не предоставлены запросом
  • использовать оператор распространения, чтобы объединить их все вместе
  • передать их всеслужба комментариев для сохранения через репозиторий TypeORM

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

Это анти-паттерн?Должен ли я переместить этот объект, создать / объединить / отформатировать в сервис и сохранить метод распознавателя как можно более легким?

Если так, в чем логика?

1 Ответ

0 голосов
/ 16 июня 2019

Вам следует проверить метод preload, предоставленный элементом Repository, предоставленным TypeOrm. Это позволяет группировать изменения существующего или нового объекта, что должно быть тем, что вы хотите.

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

Вы можете просмотреть базу данных как репозиторий git, сначала получить ее, изменить локальные изменения на значение удаленного заголовка, зафиксировать и отправить изменения.

...