Инструменты пользователя

Инструменты сайта


php:shablony_proektirovanija:structural_patterns:data_mapper

Преобразователь Данных (Data Mapper)

▶ code

Преобразователь Данных — это паттерн, который выступает в роли посредника для двунаправленной передачи данных между
постоянным хранилищем данных (часто, реляционной базы данных) и представления данных в памяти (слой домена, то что уже
загружено и используется для логической обработки). Цель паттерна в том, чтобы держать представление данных в памяти и
постоянное хранилище данных независимыми друг от друга и от самого преобразователя данных

Ключевым моментом этого паттерна, в отличие от Активной Записи (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
php/shablony_proektirovanija/structural_patterns/data_mapper.txt · Последние изменения: 2023/08/17 14:39 — werwolf