Javascript lb4调用不同存储库中的另一个存储库
在主存储库中调用不同存储库的最佳方式是什么?我试着使用服务。比如说Javascript lb4调用不同存储库中的另一个存储库,javascript,typescript,loopbackjs,strongloop,loopback4,Javascript,Typescript,Loopbackjs,Strongloop,Loopback4,在主存储库中调用不同存储库的最佳方式是什么?我试着使用服务。比如说 ... @injectable({scope: BindingScope.TRANSIENT}) export class ProjectService { constructor(@repository(ProjectRepository) public projectRepository: ProjectRepository) { } } 这是我的服务代码。当我在另一个repository定义此服务时,我可以访问p
...
@injectable({scope: BindingScope.TRANSIENT})
export class ProjectService {
constructor(@repository(ProjectRepository) public projectRepository: ProjectRepository) { }
}
这是我的服务代码。当我在另一个repository定义此服务时,我可以访问projectRepository。但我不确定这是否是最好的方法。我们可以从关系[1]中获取一页,并利用
@repository.getter()
[2]在主存储库中执行依赖项注入:
从'@loopback/core'导入{Getter};
从'@loopback/repository'导入{defaultcrudepository,repository};
导出类MainRepository()扩展了DefaultCrudepository{
建造师(
@getter(ProjectRepository)
private_projectRepositoryGetter:Getter;
)
异步yourFunction():承诺{
让projectRepository=等待此操作。_projectRepositoryGetter();
//`projectRepository`现在包含projectRepository的一个实例。
}
}
在上面的示例中,我们利用构造函数注入,在一个名为yourFunction
的任意函数中检索ProjectRepository
实例。但是,您可以使用依赖项注入[3]的任何风格,并在同一闭包中的任何函数中检索实例
为什么是getter?
防止循环依赖的getter。这些在存储库中尤其普遍,因为它们之间可能存在相互关联的关系。getter通过延迟绑定解析来实现这一点,直到LB4应用程序明确请求
何时使用服务?
服务可以被认为是比存储库更高级别的抽象。它们不需要实现标准的CRUD或KV接口,也不需要连接到数据源。如果您需要超出存储库范围的逻辑,这非常有用。例如,服务可以实现一个功能,添加一个新的数据库记录并将文件上传到AmazonS3。这将在与数据存储接口的代码和不与数据存储接口的代码之间保持清晰的分离,从而确保数据存储逻辑保持可预测性、可读性和易于测试
链接
[1] ()
[2] ()
[3] ()