Я нашел множество примеров вложенных «примеров» приложений, но у каждого из них, похоже, немного разные мнения о шаблонах проектирования.В настоящее время меня интересует, где работа по подготовке объекта должна идти между распознавателем и службой в сочетании с 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
Причина в том, что служба комментариев просто принимает и сохраняет хорошо отформатированный объект.Возможно, в будущем мне нужно будет подготовить комментарий, который будет создан по-другому, и это будет определено в новой мутации.
Это анти-паттерн?Должен ли я переместить этот объект, создать / объединить / отформатировать в сервис и сохранить метод распознавателя как можно более легким?
Если так, в чем логика?