gpt4 book ai didi

nestjs - 具有 TypeORM Active Record 实现的 Nest.js 项目

转载 作者:行者123 更新时间:2023-12-02 20:17:58 26 4
gpt4 key购买 nike

我正在尝试使用 Nest.js 和 TypeORM 构建一个项目。我喜欢 Active Record approach在 TypeORM 中

我用一些静态辅助方法定义了一个实体如下:

export class Book extends BaseEntity {
@PrimaryGeneratedColumn()
id: number;

@Column()
name: string;

@Column()
description: string;

static async createNew(attributes: BookDto): Promise<Book> {
const entity = new Book();
entity.name = attributes.name;
entity.description = attributes.description;

return entity.save();
}

static async findByName(name: string): Promise<Book> {
return Book.findOne({
where: { name },
});
}
}

我正在尝试按照 Nest 文档中的模式将其注入(inject)到我的服务中:

@Injectable()
export class BookService {
constructor(
@InjectRepository(Book)
private readonly bookRepository: Repository<Book>,
) {}

async create(bookAttrs: BookDto): Promise<Book> {
return Book.createNew(bookAttrs);
}
}

但是正如您在我的服务中看到的那样,我只使用静态方法。在这种情况下,我什至需要注入(inject)依赖项吗?我应该遵循更好的模式吗?

最佳答案

如果您采用这种方法,则无需在服务中注入(inject) Repository,甚至不必导入 TypeOrmModule.forFeature([User] ) 在你的功能模块中,因为你没有注入(inject)任何 TypeOrm 相关的东西,因为你使用的是可以在任何地方使用的(全局)静态方法。

但是,我不推荐这样做,最重要的原因是测试:Nest 为您提供了一种在测试中模拟依赖项的非常方便的方法。这是唯一可能的,因为你在你的模块中声明了你的依赖关系,并且注入(inject)器决定了将使用什么实际实现。当您通过使用静态方法具有隐式依赖项时,在您的单元和集成测试中模拟它们真的很困难,而在数据库访问的情况下您肯定想要这样做。

除了测试之外,当您从任何地方进行静态访问时,您的依赖项可能会变得困惑。在您的模块中具有声明性依赖关系非常有助于保持您的代码整洁。

关于nestjs - 具有 TypeORM Active Record 实现的 Nest.js 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51994374/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com