Шаблоны проектирования 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-репозитория, сначала получить его, переназначить локальные изменения на значение удаленного заголовка, зафиксировать и отправить изменения.