silktide/reposition

该软件包已被废弃且不再维护。没有建议的替代软件包。

模块化数据库抽象系统

1.6.4 2017-03-16 15:59 UTC

README

Build Status

模块化数据库抽象系统,注重性能和易用性

又一个DBAL?

嗯,我同意PHP中DB抽象库太多了,我自己也用了很多。我始终发现的问题是它们似乎更关注增加更多功能和能够做任何事情,而不是我想要的;一个易于使用的API,可以在需要高性能的情况下使用。

我是一个PHP开发者。我想处理对象和PHP代码,我使用的任何库都必须快速高效。我不想学习另一种查询语言,到处写注释(我不想讨论这个),或者使用处理10,000条记录就会耗尽内存的系统。

Reposition旨在简洁快速,无论是编写还是运行时都是如此。它处理几乎所有的基础工作,让你能够专注于开发你的应用程序,而不是与查询搏斗或担心加载所有这些记录的性能成本。即使复杂的实体关系也能轻松处理,唯一的要求是你事先知道你想要加载或保存的信息。

除此之外,Reposition是模块化的。API被设计为数据库无关,这意味着你可以更改数据库提供者,而无需更改任何存储库或模型。Reposition最初是为NoSQL数据库编写的,后来重构为与SQL一起使用,因此甚至可以在这两种类型的数据库之间进行切换(尽管每种类型的数据模式可能不兼容)。重点是,你可以在尽可能少的约束下拥有灵活性和选择。

安装

通常,你不会直接安装Reposition;它是你选择的数据库提供者模块的要求。然而,如果你想创建一个模块,你可以通过composer安装

composer require silktide/reposition

{
  "require": {
    "silktide/reposition": "^1.0"
  }
}

Reposition模块使用“单一职责”原则;一个模块应该做一件事情,并且做好。目前有两个Reposition模块

Reposition SQL正如其名,是一个模块,它使SQL数据库可以与Reposition一起使用。它在数据库上执行查询,使用由存储库类生成的令牌序列。它已与MySQL和PostgreSQL进行了测试,应该可以轻松适应其他SQL数据库版本。

Reposition Clay管理每个存储库中使用的实体。它生成每个存储库用于创建查询的实体元数据,并从查询返回的原始查询中创建实体。《Clay》是它使用的模型创建库的名称。

在大多数情况下,你希望将这两个模块包含在所有使用Reposition的项目中。然而,你可以自由选择任何具有每个部分功能的解决方案,或者如果你更喜欢,可以编写自己的。

快速示例

这是Reposition存储库的一个示例

use Silktide\Reposition\Repository\AbstractRepository;

class ExampleRepository extends AbstractRepository
{
    protected $collectionName = "example_table"
}

...没错,就是这样。这就是你需要的一切。有了这个,你可以找到、过滤、保存和删除实体,而不需要对存储库类进行任何进一步的修改。

可以通过在存储库类上创建新方法并使用查询构建器来创建自定义查询来编写更复杂的查询。可以通过重写 configureMetadata 方法并添加所需的配置来定义实体之间的关系。

存储库管理

创建新的存储库时需要四个对象:实体元数据为存储库提供有关其交互的实体的信息,查询构建器允许存储库创建表示数据库查询的令牌序列,存储对象提供对数据库实现的访问,元数据提供者允许存储库访问相关实体的元数据(例如在加载时创建连接或保存时级联更新操作)。

幸运的是,存在 RepositoryManager 来尽可能地使这个过程无缝。以下代码将为特定实体创建一个存储库

$repository = $repositoryManager->getRepositoryFor($entityOrEntityClassName);

存储库管理器可以手动创建,或通过依赖注入进行配置。存储库本身可以通过任何可以使用工厂服务的 DI 库进行依赖注入。以下是对 Syringe DI 库的示例

repository:
    class: RepositoryClassName
    factoryService: @repositoryManager
    factoryMethod: "getRepositoryFor"
    arguments:
        - EntityClassName

文档

更深入的文档可以在 readthedocs.org 找到。请注意,这是一个正在进行中的工作。

鸣谢

由 Danny Smart (Downsider) 为 Silktide Ltd 撰写