php 动态数据映射对象_数据映射模式

### 概述

数据映射器是一种数据访问层,它执行持久性数据存储(通常是关系数据库)和内存数据表示(域层)之间的数据双向传输。 该模式的目标是保持内存表示和持久数据存储相互独立,并

保持数据映射器本身。 该层由一个或多个映射器(或数据访问对象)组成,执行数据传输。 映射器实现的范围有所不同。 通用映射器将处理许多不同的域实体类型,专用映射器将处理一

个或几个。

### 实例

~~~

class User{

private $username;

private $email;

public function __construct($username, $email)

{

$this->username = $username;

$this->email = $email;

}

public static function fromState(array $state): User

{

return new self(

$state['username'],

$state['email']

);

}

public function getUsername()

{

return $this->username;

}

public function getEmail()

{

return $this->email;

}

}

class StorageAdapter{

private $data = [];

public function __construct(array $data)

{

$this->data = $data;

}

public function find(int $id)

{

if(isset($this->data[$id])){

return $this->data[$id];

}

return null;

}

}

class UserMapper{

private $adapter;

public function __construct(StorageAdapter $storage)

{

$this->adapter = $storage;

}

/**

* 根据ID从储存器中找到用户,并返回一个用户对象

* 在内存中,通常这种逻辑使用Repository模式来实现

* 然后,中的部分是在下面的mapRowToUser()中,它将从中创建一个业务对象

* 从储存中获取的数据

*/

public function findById(int $id): User

{

$res = $this->adapter->find($id);

if($res === null){

throw new Exception("not found");

}

return $this->mapRowToUser($res);

}

private function mapRowToUser(array $row): User

{

return User::fromState($row);

}

}

$storage = new StorageAdapter([1=>['username'=>'jack','email'=>'7740280@qq.com']]);

$mapper = new UserMapper($storage);

$user = $mapper->findById(1);

var_dump($user instanceof User);

~~~

~~~

true

~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值