«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Аноним 2020/09/07 22:09:44  №1800116 1
Делаю тестхаб и дошел до создания новых тестов пользователем. При создании нового от юзера приходит большой ассоциативный массив с сложной структурой, который содержит все данные по тесту(вопросы, ответы, всякая общая инфа и т.д.), и функция проходится по нему, валидируя и добавляя в базу вопросы и ответы. И вот тут я немного сомневаюсь, насколько это хорошо с точки зрения архитектуры и читабельности кода. Не лучше ли разбить этот большой массив, который приходит от юзера, на несколько маленьких, которые будут содержать по отдельности вопросы, ответы и т. д. и затем их уже загружать в сервис, который редактирует и создает тесты?
Ответы: >>1800682
Аноним 2020/09/08 12:04:30  №1800682 2
>>1800116

Конечно, лучше делать структуру данных попроще. Если она сложная, то ты можешь описать ее с помощью ООП:

- создать объекты DTO, представляющие данные о вопросе, ответе, итд
- с помощью сериалайзера вроде JMS Serializer / Symfony Serializer преобразовывать приходящий массив в граф объектов
- работать с объектами

Также, можно обойтись без DTO и преобразовывать приходящий массив сериалайзером в объекты-модели. У тебя же есть объекты Вопрос, ВариантОтвета, Тест и тд?

Есть другие варианты. Если бы ты использовал библиотеку Symfony Form, ты бы мог описать форму, и она сама преобразовала бы приходящие массивы в объекты.

То есть, если структура данных сложная, то стоит описать ее с помощью объектов. Если не очень - можно просто обходить эти массивы и вручную переносить данные в объекты.

Было бы хорошо, конечно, использовать Symfony Form: она и преобразует приходящие массивы в объекты, и умеет их валидировать.