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


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

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
26 апр. 2024, в 10:01
500 руб./за проект
26 апр. 2024, в 09:18
500 руб./в час
26 апр. 2024, в 06:46
1500 руб./в час