matthiasnoback / broadway-serialization
Broadway 的序列化助手
v3.0.0
2021-01-30 16:11 UTC
Requires
- php: ^7.0|^8.0
- broadway/broadway: ^2.1
- doctrine/instantiator: ^1.0
Requires (Dev)
- phpbench/phpbench: ^1.0@alpha
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-08-29 04:14:28 UTC
README
作者:Matthias Noback
事件源框架 Broadway 需要您许多对象(如领域事件,以及通常还包括视图模型)可序列化,因为它们必须以纯文本形式存储,并在以后重建。
使对象可序列化需要您编写大量相当简单的代码。尽管这些代码很简单,但您很可能会在其中犯错误。编写这些代码也有些无聊。为了减轻痛苦,这个库帮助您通过几个简单的步骤使对象可序列化。
安装
只需运行
composer require matthiasnoback/broadway-serialization
约定
这个库非常简单,因为它基于一些简单且合理的假设 只需工作即可
- 可序列化对象至少有一个属性。属性可以有任何作用域。
- 可序列化对象实现了 Broadway 的
Serializable
接口。 - 属性包含标量值、可序列化对象或可序列化对象的数组。
示例
use Broadway\Serializer\Serializable; use BroadwaySerialization\Serialization\AutoSerializable; class SerializableObject implements SerializableInterface { use AutoSerializable; /** * @var string */ private $foo; /** * @var SerializableObject */ private $bar; /** * @var SerializableObject[] */ private $bars = []; protected static function deserializationCallbacks() { return [ 'bar' => ['SerializableObject', 'deserialize'], 'bars' => ['SerializableObject', 'deserialize'] ]; } }
通过实现 deserializationCallbacks()
,您可以定义在解序列化提供的数据时应该调用的可调用函数。对于单个值,可调用函数将调用一次;对于值的数组,可调用函数将多次调用。
设置
Serializable
特性依赖于一些设置。在调用其 deserialize()
方法之前,请确保您已正确设置 Reconstitute
服务,如下所示
use BroadwaySerialization\Reconstitution\Reconstitution; use BroadwaySerialization\Reconstitution\ReconstituteUsingInstantiatorAndHydrator; use Doctrine\Instantiator\Instantiator; use BroadwaySerialization\Hydration\HydrateUsingReflection; Reconstitution::reconstituteUsing( new ReconstituteUsingInstantiatorAndHydrator( new Instantiator(), new HydrateUsingReflection() ) );
请注意,此包附带不同的 hydrator 实现。根据您的设置和偏好,您也可以使用 HydrateUsingClosure
类。前者通常比 HydrateUsingReflection
表现更好。
性能
使用此库时,您个人的性能将显著提高。当然,运行时性能会稍差(除非您实际上正在解序列化数百万个对象,否则不会明显注意到)。