发布于 2026-01-06 1 阅读
0

随心所欲地修改数据库 | 仓储模式 📦 📦 仓储模式

随心所欲地修改数据库 | 存储库模式 📦

📦 仓库模式

📦 仓库模式

这是一个使用Repository Patternwith语句像专业人士Dependency Injection一样操作数据库的实用且真实的示例。😎

什么是仓库模式?🤔

存储库是classes封装components访问数据源所需逻辑的机制。它们集中管理常用的数据访问功能,从而提高可维护性,并将用于访问数据库的基础架构或技术解耦。这使得我们可以随时更改所使用的数据库,例如从一个数据库切换MySQL到另一个数据库,而MongoDB无需增加额外的复杂性。

存储库模式图 UML

正如你所看到的,Repository对应于接口,也就是具体实现必须满足的契约。在这种情况下MongoRepository,,MySQLRepositoryPostgreRepository

注意:每当我们想要添加一个新的实现(另一个数据库)时,我们都必须实现此接口。

什么是依赖注入?💉

依赖注入允许将对象提供给类,而不是由类本身创建这些对象。这些对象满足类正常运行所需的契约(接口)。

依赖注入

定义我们的接口

// Define our interfaces/contract
interface Repository<T = any> {
  create(data: T, query?: Query): Promise<T>
  // Other methods...
}
Enter fullscreen mode Exit fullscreen mode

定义我们的实现方式

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...
  }
}
Enter fullscreen mode Exit fullscreen mode

明确我们的客户群体

class Controller {
  constructor (repository: Repository) {}
}

// Using MongoDB 🍃
new Controller(new MongoRepository())

// Using MySQL 🐬
new Controller(new MySQLRepository())
Enter fullscreen mode Exit fullscreen mode

如您所见,这样我们就可以很轻松地更改数据库,因为我们的Controller客户不依赖于其具体实现,而是依赖于一个Repository接口。

关注我❤️

文章来源:https://dev.to/ivanzm123/change-the-db-as-you-wish-repository-pattern-2h2h