phpgt/dataobject

结构化、类型安全、不可变的数据传输。

资助包维护!
phpgt

v1.0.7 2023-07-13 09:45 UTC

README

在编程语言中,数据传输对象(DTO)是一种设计模式,它简化了应用程序不同层次之间的数据传输。这个库引入了DataObject类,可以使用DataObjectBuilder类从现有的关联数组或标准对象构建。

Build status Code quality Code coverage Current version PHP.Gt/DataObject documentation

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数据结构在范围上几乎与这个仓库中引入的数据对象相同,只有一个关键区别:JSON数据可以表示原始数据类型,不一定是键值对。正因为如此,PHP.Gt/Json作为此数据对象仓库的扩展,单独维护以提供结构化、类型安全、不可变的JSON对象。