【问题标题】:How to implement repository design pattern for MongoDB on NestJS如何在 NestJS 上实现 MongoDB 的存储库设计模式
【发布时间】:2019-11-17 07:54:27
【问题描述】:

我正在尝试弄清楚如何在使用 MongoDB 和 mongoose 数据库的 NestJS 上实现存储库设计模式

【问题讨论】:

标签: node.js design-patterns mongoose nestjs


【解决方案1】:

Repository 可以注入到服务中,它应该包含在模块内的 providers 数组中。

// user.service.ts
@Injectable()
export class UserService {
  constructor(private readonly userRepository: UserRepository) {}

  async findAll(): Promise<User[]> {
    return this.userRepository.findAll();
  }
}
// user.repository.ts
@Injectable()
export class UserRepository {
  constructor(@InjectModel(User.name) private userModel: Model<UserDocument>) {}

  async findAll(): Promise<User[]> {
    return this.userModel.find().exec();
  }
}
// user.module.ts
@Module({
  imports: [
    MongooseModule.forFeature([{ name: User.name, schema: UserSchema }]),
  ],
  providers: [UserRepository, UserService],
  exports: [UserService],
})
export class UserModule {}

【讨论】:

  • 在服务中使用存储库有什么好处,看起来我们做了两次同样的事情,我们只需在服务中注入模型就可以做同样的事情
  • 这是一个非常简单的例子,有些方法可能包含一些复杂的逻辑。最好有一个单独的数据访问层。如果需要更改数据库,只需实现具有现有接口的新存储库并将其注入服务,服务方法将保持不变。
  • 如何为这个服务编写单元测试?
  • @huykon225 这个对单元测试没有意义,但通常,存储库和外部依赖项在服务中被模拟,并且一些用例被测试覆盖
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多