tbpixel / type-adapter
一个类型安全的包,用于将一种数据类型转换为另一种类型。
Requires
- php: ^7.1
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.14
- infection/infection: ^0.12.2
- phpstan/phpstan: ^0.11.4
- phpunit/phpunit: ^7
- symfony/var-dumper: ^4.2
This package is auto-updated.
Last update: 2024-09-21 20:41:15 UTC
README
一个类型安全的包,用于将一种数据类型转换为另一种类型。
内容
安装
通过composer
composer require tbpixel/type-adapter
目的
您是否曾需要将一个实例(通常是一个数据传输对象)从一种类型转换为另一种类型?我发现自己在编写静态构造函数,例如
class Foo { /** @var string **/ public $name; } class Bar { /** @var string **/ public $name; public function __construct(string $name) { $this->name = $name; } public static function fromFoo(Foo $foo): self { return new self($foo->name); } }
说实话,这对于开始来说是可以的,但它实际上在处理这些构造函数转换时创建了对象之间的紧密耦合。如果我想完全删除Foo
,我必须去找到所有调用Bar
类中fromFoo
的地方!如果源类型来自一个包,这可能会变得更糟;可能需要将此包与应用程序解耦,但现在它在我的应用程序中被广泛引用。
这就是我创建Type Adapter包的原因。这个包允许进行松散耦合、类型安全的转换,而不需要静态构造函数。它试图减少耦合,并作为应用程序各层之间的通信转换器。它在六边形架构和领域驱动应用程序、软件开发中特别有用。
示例
以上面的类型为例,我们可以创建一个适配器,将Foo
转换为Bar
,如下所示
use TBPixel\TypeAdapter\Adaptable; class FooToBarAdapter implements Adaptable { /** * Adapts a Foo resource into a Bar resource. * * @param Foo $resource * * @return Bar */ public function adapt($resource) { return new Bar($resource->name); } /** * Returns the acceptable valid resource type as either a string or an array. * * @return array|string */ public function expects() { return Foo::class; } }
在这里,你可以看到一些事情正在发生。首先,我们实现了这个包中定义的Adaptable
接口。此接口要求我们实现一个adapt($resource)
方法和一个expects()
方法。
adapt
方法接受资源,我们可以使用文档注释进行类型提示,然后返回转换后的类型。
expects
方法用于类型安全。它为adapt
方法定义了一个验证规则,这是允许我们进行类型安全的地方。
expects
方法可以返回一个string
类型的名称或一个包含字符串的array
,用于可变参数类型。
贡献
有关详细信息,请参阅CONTRIBUTING。
变更日志
有关最近更改的更多信息,请参阅CHANGELOG。
支持我
嗨!我是一个居住在BC省温哥华的开发者。如果你想支持我,可以考虑在Twitter @TBPixel上关注我,或者买我一杯咖啡。谢谢!
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。