===== Преобразователь Данных (Data Mapper) ===== [[http://webmastermsk.ru:30000/serg/patterns-php/-/blob/main/structural/Data_mapper.php|▶ code]] Преобразователь Данных — это паттерн, который выступает в роли посредника для двунаправленной передачи данных между\\ постоянным хранилищем данных (часто, реляционной базы данных) и представления данных в памяти (слой домена, то что уже\\ загружено и используется для логической обработки). Цель паттерна в том, чтобы держать представление данных в памяти и\\ постоянное хранилище данных независимыми друг от друга и от самого преобразователя данных Ключевым моментом этого паттерна, в отличие от Активной Записи (Active Records) является то, что модель данных следует\\ Принципу Единой Обязанности SOLID. **Data_mapper.php** 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