Оглавление:
Карта сайта:
Оглавление:
Карта сайта:
Это старая версия документа!
## Преобразователь Данных (Data Mapper)
[▶ code](http://webmastermsk.ru:30000/serg/patterns-php/-/blob/main/structural/Data_mapper.php)
Преобразователь Данных — это паттерн, который выступает в роли посредника для двунаправленной передачи данных между постоянным хранилищем данных (часто, реляционной базы данных) и представления данных в памяти (слой домена, то что уже загружено и используется для логической обработки). Цель паттерна в том, чтобы держать представление данных в памяти и постоянное хранилище данных независимыми друг от друга и от самого преобразователя данных
Ключевым моментом этого паттерна, в отличие от Активной Записи (Active Records) является то, что модель данных следует Принципу Единой Обязанности SOLID.
Data_mapper.php
<?php class Worker { private string $name; public function getName(): string { return $this->name; } public function __construct(string $name) { $this->name = $name; } public static function make($args): Worker { return new self($args['name']); } } // Вытаскивать данные class WorkerMapper { private WorkerStorageAdapter $workerStorageAdapter; public function __construct(WorkerStorageAdapter $workerStorageAdapter) { $this->workerStorageAdapter = $workerStorageAdapter; } public function findById($id): string|Worker { $res = $this->workerStorageAdapter->find($id); if ($res === null) { return 'Worker with this id doesnt exists'; } return $this->make($res); } private function make($args): Worker { return Worker::make($args); } } // Хранит данные class WorkerStorageAdapter { private array $data = []; public function __construct(array $data) { $this->data = $data; } public function find($id) { if (isset($this->data[$id])) { return $this->data[$id]; } return null; } } $data = [ 1 => [ 'name' => 'Boris' ], 'test' => [ 'name' => 'Anton' ], ]; $workerStorageAdapter = new WorkerStorageAdapter($data); $workerMapper = new WorkerMapper($workerStorageAdapter); $worker = $workerMapper->findById(1); echo $worker->getName(); // Boris