資料映射器是一個資料訪問層,用于將資料在持久性資料存盤(通常是一個關系資料庫)和記憶體中的資料表示(領域層)之間進行相互轉換,其目的是為了將資料的記憶體表示、持久存盤、資料訪問進行分離,該層由一個或者多個映射器組成(或者資料訪問物件),并且進行資料的轉換,映射器的實作在范圍上有所不同,通用映射器將處理許多不同領域的物體型別,而專用映射器將處理一個或幾個,
例子就是資料庫的ORM
這個是資料的物件表示:
class User{ private string $username; private string $email; //將陣列轉成物件 public static function fromState(array $state): User { return new self( $state['username'], $state['email'] ); } //通過建構式獲取物件 public function __construct(string $username, string $email){ $this->username = $username; $this->email = $email; } public function getUsername(): string{ return $this->username; } public function getEmail(): string{ return $this->email; } }
這個是資料的映射,將存盤中的資料映射到物件的中間那層
class UserMapper{ private StorageAdapter $adapter; public function __construct(StorageAdapter $storage){ $this->adapter = $storage; } public function findById(int $id): User{ $result = $this->adapter->find($id); return $this->mapRowToUser($result); } private function mapRowToUser(array $row): User{ return User::fromState($row); } }
這個是資料的訪問
class StorageAdapter { private array $data =https://www.cnblogs.com/taoshihan/p/ []; public function __construct(array $data) { $this->data =https://www.cnblogs.com/taoshihan/p/ $data; } public function find(int $id) { if (isset($this->data[$id])) { return $this->data[$id]; } } }
使用的程序$user就是最終的物件
$storage = new StorageAdapter([1 => ['username' => '陶士涵', 'email' => '[email protected]']]); $mapper = new UserMapper($storage); $user = $mapper->findById(1);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/172524.html
標籤:PHP
