bridit / values
替代实体对象。构建模型、API 客户端等的高效方法
README
formapro\values
是一个 MIT 许可的开源项目,其持续开发完全得益于社区和我们的客户的支持。如果您想加入他们,请考虑
您的“替代自我”对象
这种方法试图从数组和对象世界中汲取最好的。因此,使用这个库,您可以像平时一样处理对象,但内部一切都是存储在数组中。数组很容易从对象中提取或设置。
可用于
- 与 MongoDB - makasim/yadm 交互。
- 描述 API 客户端 - formapro/telegram-bot。
- 描述领域模型 - formapro/pvm
- 描述 MQ 消息。
一个对象 为我们提供了一个容易依赖的合同。我们可以为类添加类型提示,对其方法使用自动完成。这是一件好事,但是填充对象或获取其当前状态既不容易也不便宜。我们提供了各种工具,如序列化程序、转换器等。当我们必须处理对象树时,事情变得更糟。
另一方面,一个数组 容易存储或发送。每当您调用 API 或对数据库进行查询时,您都会遇到一个数组。这是它的优势,但它不提供任何合同,当数组结构改变时,代码很容易被破坏。
示例
获取存储库信息示例
让我们使用 Github API 并获取有关 Symfony 存储库的信息。这里是 实际响应,我们将使用简化的版本。
<?php namespace Acme; use Formapro\Values\ValuesTrait; use Formapro\Values\ObjectsTrait; use function Formapro\Values\set_values; class Repo { use ValuesTrait; use ObjectsTrait; public function getStargazersCount() { return $this->getValue('stargazers_count'); } /** @return Owner */ public function getOwner() { return $this->getObject('owner', Owner::class); } } class Owner { use ValuesTrait; public function getId() { return $this->getValue('id'); } public function getLogin() { return $this->getValue('login'); } } $data = json_decode(' { "id":458058, "name":"symfony", "full_name":"symfony/symfony", "owner":{ "login":"symfony", "id":143937, }, "stargazers_count":13945, } ', true); $repo = new Repo(); set_values($repo, $data); $repo->getStargazersCount(); // 13945 $repo->getOwner()->getLogin(); // symfony
创建新 gist
现在,让我们创建一个新的 gist。根据 Github API,我们必须发送一个包含文件集合的对象。让我们创建 Gist 和 GistFile 对象。用数据填充它们并获取数组。
<?php namespace Acme; use Formapro\Values\ObjectsTrait; use Formapro\Values\ValuesTrait; class Gist { use ValuesTrait; use ObjectsTrait; public function setDescription($description) { $this->setValue('description', $description); } public function setPublic($bool) { $this->setValue('public', $bool); } public function addFile($fileName, GistFile $file) { $this->addObject('files', $file, $fileName); } } class GistFile { use ValuesTrait; public function __construct($content) { $this->setValue('content', $content); } } $file = new GistFile('String file contents'); $gist = new Gist(); $gist->setDescription('the description for this gist'); $gist->setPublic(true); $gist->addFile('file1.txt', $file); get_values($gist); /* [ 'description' => 'the description for this gist', 'public' => true, 'files' => [ 'file1.txt' => [ 'content' => 'String file contents', ] ] ] */ // now you can send it to api.
由 Forma-Pro 开发
Forma-Pro 是一家全栈开发公司,其兴趣也扩展到开源开发。作为一支强大的专业团队,我们有一个目标和能力,通过开发最前沿的解决方案来帮助社区,这些解决方案在电子商务、docker 和面向微服务的架构领域积累了多年的经验。我们的主要专业领域是基于 Symfony 框架的解决方案,但我们始终寻找能够以最佳方式完成我们工作的技术。我们致力于创建革命性的解决方案,改变我们在架构和可扩展性方面的开发方式。
如果您对我们的开源开发有任何问题或疑问,特别是关于这个产品或任何其他事项,请随时联系 opensource@forma-pro.com
许可
它是在 MIT 许可 下发布的。