随心所欲地修改数据库 | 存储库模式 📦
📦 仓库模式
📦 仓库模式
这是一个使用Repository Patternwith语句像专业人士Dependency Injection一样操作数据库的实用且真实的示例。😎
什么是仓库模式?🤔
存储库是classes封装components访问数据源所需逻辑的机制。它们集中管理常用的数据访问功能,从而提高可维护性,并将用于访问数据库的基础架构或技术解耦。这使得我们可以随时更改所使用的数据库,例如从一个数据库切换MySQL到另一个数据库,而MongoDB无需增加额外的复杂性。
正如你所看到的,它Repository对应于接口,也就是具体实现必须满足的契约。在这种情况下MongoRepository,,MySQLRepository。PostgreRepository
注意:每当我们想要添加一个新的实现(另一个数据库)时,我们都必须实现此接口。
什么是依赖注入?💉
依赖注入允许将对象提供给类,而不是由类本身创建这些对象。这些对象满足类正常运行所需的契约(接口)。
定义我们的接口。
// Define our interfaces/contract
interface Repository<T = any> {
create(data: T, query?: Query): Promise<T>
// Other methods...
}
定义我们的实现方式。
class MongoRepository implements Repository {
async create(data: any, query?: Query): Promise<any> {
// Do something...
}
}
class MySQLRepository implements Repository {
async create(data: any, query?: Query): Promise<any> {
// Do something...
}
}
明确我们的客户群体。
class Controller {
constructor (repository: Repository) {}
}
// Using MongoDB 🍃
new Controller(new MongoRepository())
// Using MySQL 🐬
new Controller(new MySQLRepository())
如您所见,这样我们就可以很轻松地更改数据库,因为我们的Controller客户不依赖于其具体实现,而是依赖于一个Repository接口。

