ragnar_ok
@ragnar_ok

Какой паттерн использовать для формирования выходных данных?

По условию задачи нужно получить массив с данными и отдать на клиент. Пришел к выводу, что с использованием нижеуказанной структуры, можно будет гибко формировать выходной массив. Оптимальна эта структура?

Наверняка эта структура может соответствовать какому-либо паттерну проектирования. Подскажите, пожалуйста, паттерн близкий по назначению.

abstract class AbstractData
{
    protected $data = [];

    public function getData(): array
    {
        return $this->data;
    }

    abstract public function setData(): void;
}

class ConcreteDataA extends AbstractData
{
    public function setData()
    {
        $this->data['foo'] = 'foo';
        $this->data['bar'] = 'bar';
    }
}

class ConcreteDataB extends AbstractData
{
    public function setData()
    {
        $this->data['baz'] = 'baz';
    }
}

// клиентский код в контроллере
$dataA = new ConcreteDataA;
$dataA->setData();
print_r($dataA->getData());

$dataB = new ConcreteDataB;
$dataB->setData();
print_r($dataB->getData());
  • Вопрос задан
  • 105 просмотров
Решения вопроса 1
php666
@php666
PHP-макака
В laravel есть нечто похожее, не смог найти в документации, забыл как называется. Суть в том, что на каждый ответ, например на ajax-запрос, имеется свой класс, который принимает на вход что-то, а отдает строго оговоренный массив данных, который тупо прописывается в методе, который возвращает результирующий массив.
Только там не как у тебя в setData() основная работа, а наоборот:
class foo {
   public function getData() {
      return [
          'key' -> $object->id,
          // ....
      ];
   }
}


Но, как мне кажется, это избыточный слой. Почему не отдавать содержимое какой-либо сущьности (объекта, массива данных, коллекции) как есть, полностью?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы