Шаблоны проектирования NestJS + TypORM: распознаватель и сервис

Я нашел множество примеров гнездовых "примеров" приложений, но у каждого, похоже, немного разные мнения о шаблонах дизайна. В настоящее время меня интересует, где работа по подготовке объекта должна идти между распознавателем и службой в сочетании с 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);
}

т.е.

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

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

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

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

1 ответ

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

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

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

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