1

我发现了许多嵌套“示例”应用程序的示例,但每个示例对设计模式的看法似乎都略有不同。我目前对与 TypeORM 结合使用时,解析器和服务之间的对象准备工作应该在哪里进行感兴趣。

例如:

评论.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;
}

评论.service.ts:

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

IE

  • 创建新的空评论实体
  • 添加查询未提供的字段值
  • 使用扩展运算符将它们组合在一起
  • 将它们全部传递给评论服务以通过 TypeORM 存储库保存

理由是评论服务只接受并保存格式良好的实体。也许将来我需要准备以不同方式创建的评论,以便在新的突变中定义。

这是反模式吗?我是否应该将该对象创建/组合/格式化移动到服务中,并使解析器方法尽可能轻?

如果是这样,这背后的逻辑是什么?

4

1 回答 1

0

您应该检查TypeOrmpreload提供的项目提供的方法。Repository它允许对现有实体或新实体进行批量更改,这应该是您想要的。

我认为 TypeOrm 非常不拘一格,您可以自由选择如何组织实体上的突变。我仍然认为“预加载”存储库模式是一种安全的模式,因为您总是希望首先从数据库中获取与您提议的更改相对应的值,然后批量处理实体中的更改并随后保存。它应该会降低您在实体上获得冲突值或获得双重值等的机会。

您可以将数据库视为 git 存储库,首先获取,根据远程头值重新设置本地更改,提交并推送您的更改。

于 2019-06-15T23:30:19.263 回答