В laravel есть нечто похожее, не смог найти в документации, забыл как называется. Суть в том, что на каждый ответ, например на ajax-запрос, имеется свой класс, который принимает на вход что-то, а отдает строго оговоренный массив данных, который тупо прописывается в методе, который возвращает результирующий массив.
Только там не как у тебя в setData() основная работа, а наоборот:
class foo {
public function getData() {
return [
'key' -> $object->id,
// ....
];
}
}
Но, как мне кажется, это избыточный слой. Почему не отдавать содержимое какой-либо сущьности (объекта, массива данных, коллекции) как есть, полностью?