我很难理解 Loopback 4 中存储库的概念,文档说:
Repository 表示一个专门的 Service 接口,它针对底层数据库或服务提供域模型的强类型数据访问(例如,CRUD)操作。
但是这个描述并不能帮助我完全理解它们背后的想法,有人可以简单地解释一下它到底是什么,并提供一些其他框架中类似概念的例子吗?
我很难理解 Loopback 4 中存储库的概念,文档说:
Repository 表示一个专门的 Service 接口,它针对底层数据库或服务提供域模型的强类型数据访问(例如,CRUD)操作。
但是这个描述并不能帮助我完全理解它们背后的想法,有人可以简单地解释一下它到底是什么,并提供一些其他框架中类似概念的例子吗?
当使用 ORM(对象关系映射器)框架时,我们将数据表示为模型类:
@model()
class Person {
@property()
name: string;
}
要持久化和查询数据,我们需要向模型添加行为。存储库是提供此类行为的类。
例如,LoopBack 的EntityCrudRepository
接口描述了在 SQL 表/NoSQL 文档集合中创建、更新、删除和查询数据的方法。
// simplified version
interface EntityCrudRepository<T, ID> {
create(data: DataObject<T>): Promise<T>;
find(filter?: Filter<T>): Promise<T[]>;
updateById(id: ID, data: DataObject<T>): Promise<void>;
deleteById(id: ID): Promise<void>;
// etc.
}
KeyValueRepository
描述了使用 Redis 等键值存储的API:
interface KeyValueRepository<T> {
get(key: string): Promise<T>;
set(key: string, value: DataObject<T>): Promise<void>;
delete(key: string): Promise<void>;
}
另见企业应用架构模式:
从概念上讲,存储库封装了持久化在数据存储中的一组对象以及对它们执行的操作,从而提供了持久层的更面向对象的视图。存储库还支持实现域和数据映射层之间的清晰分离和单向依赖的目标。