stratadox/identity-map

v0.5.1 2018-05-22 22:32 UTC

This package is auto-updated.

Last update: 2024-09-29 04:47:55 UTC


README

Build Status Coverage Status Scrutinizer Code Quality Infection Minimum PhpStan Level Maintainability Latest Stable Version License

通过身份映射对象。

关于

包含已加载的对象。

主要用于防止唯一实体的重复加载,并作为已加载实体的注册表。

安装

使用 composer require stratadox/identity-map 安装

这是什么?

身份映射 是所有从数据源加载的实体的注册表。

客户端代码在执行昂贵的检索操作(如查询数据库或请求在线资源)之前可以咨询身份映射。

它如何工作?

它本质上是一个不可变的包含对象的映射的映射。

第一层映射类到该类已加载对象的映射。第二层从身份映射到实际对象。

此外,它还包含一个反向映射,可以快速将实例映射到其ID。

如何使用此工具?

创建映射

创建一个预先填充对象的映射

$map = IdentityMap::with([
    'id1' => $object1,
    'id2' => $object2,
]);

或者从空白映射开始

$map = IdentityMap::startEmpty();

...之后用对象填充它

$map = $map->add('id3', $object3);

可以通过以下方式从映射中删除对象

$map = $map->remove(Foo::class, 'id3');

或者

$map = $map->removeThe($object);

咨询映射

检查请求的ID的实体是否已在映射中存在

if ($map->has(Foo::class, '1')) { ...

从映射中检索相应的对象

$object = $map->get(Foo::class, '1');

检查对象实例是否已添加

if ($map->hasThe($object)) { ...

检索映射中对象的ID

$id = $map->idOf($object);

防止不想要的类

当加载可能包含实体和值对象的一组对象时,在提供身份映射时可能希望忽略值对象。

可以通过包装身份映射来实现

$map = Whitelist::forThe(IdentityMap::startEmpty(), MyEntity::class);

在这种情况下,添加不是 MyEntity 类的对象将被静默忽略。

可以通过指定更多类来白名单多个实体

$map = Whitelist::forThe(IdentityMap::startEmpty(), Foo::class, Bar::class);

或使用此快捷方式

$map = Whitelist::the(Foo::class, Bar::class);