phpgt / dataobject
结构化、类型安全、不可变的数据传输。
v1.0.7
2023-07-13 09:45 UTC
Requires
- php: >=8.0
- ext-json: *
- phpgt/typesafegetter: ^1.3
Requires (Dev)
- phpmd/phpmd: ^2.13
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10.1
- squizlabs/php_codesniffer: ^3.7
This package is auto-updated.
Last update: 2024-09-13 12:17:57 UTC
README
在编程语言中,数据传输对象(DTO)是一种设计模式,它简化了应用程序不同层之间的数据传输。此库引入了DataObject
类,该类可以使用DataObjectBuilder
类从现有的关联数组或标准对象构建。
DataObject
具有以下特性
- 它是
不可变
的,这意味着代码不能修改它所表示的数据 - 它提供了对包含数据的
类型安全
获取器 - 它可以嵌套在其他
DataObject
中 - 它可以转换为关联数组和标准对象,反之亦然
使用示例
将一个对象加载到DataObject
中,然后将其传递给第三方库进行处理。
由于DataObject
类的不可变性,第三方库不会更改数据内容的任何风险。
use Gt\DataObject\DataObjectBuilder; // Create a new Builder and build the DataObject from an associative array. // For example, data loaded from another remote data source. $sourceData = [ "id" => 105, "name" => "Edgar Scolmore", "address" => [ "street" => "32 Trestles Lane", "town" => "Lensworth", "county" => "Scamperingshire", "postcode" => "SC41 8PN" ], ]; $builder = new DataObjectBuilder(); $data = $builder->fromAssociativeArray($sourceData); // Pass the data to a third party to process it. ThirdParty::processData($data); // Now we can use the data ourselves for whatever purpose: Database::store( id: $data->getInt("id"), refname: $data->getString("name"), );
处理JSON数据
JSON数据结构在此存储库中引入的DataObject的范围几乎相同,但有一个关键的区别:JSON数据可以表示原始数据类型,不一定总是键值对。因此,PHP.Gt/Json是独立维护的,以提供结构化、类型安全、不可变的JSON对象,作为此DataObject存储库的扩展。