Symfony2: Преобразование записей базы данных для отображения

0

У меня довольно теоретический вопрос о правильном подходе к использованию Symfony, хотя я считаю, что подход должен быть таким же для любой другой структуры PHP.

У меня есть тарифные объекты, хранящиеся в базе данных. Я хочу предоставить модель затрат для каждого тарифа на основе ввода пользователем.

Мой первоначальный подход состоял в том, чтобы создать массив, каждый из которых будет содержать данные из соответствующего тарифного объекта и рассчитанных данных. Все это было сделано в методе действий контроллера.

Позже я создал еще один класс CostModel, а затем создал массив CostModel [], который был передан методу $this-> render(). Снова это делается в контроллере.

Этот подход работает достаточно хорошо. Однако, поскольку у меня мало опыта работы с Symfony, у меня есть сомнения, что этот подход - выполнение расчетов в контроллере - хороший.

Есть ли лучший способ для этого?

Теги:
formatting

1 ответ

1

Ну, на ваш вопрос может быть более одного ответа, поскольку он основан на мнениях.

То, что я могу сказать без всяких сомнений относительно кода контроллера, состоит в том, что чем меньше, тем лучше. Почему я это сказал? Поскольку код контроллера не используется повторно, поскольку контроллеры создаются для "подключенных" представлений и бизнес-логики (обратите внимание: подключайтесь, а не инкапсулируйте), и общее правило, которое я придерживаюсь при разработке с помощью Symfony2, заключается в том, чтобы писать в контроллер строки кода для "объектов", которые напрямую доступны из контроллера (форма, запрос, представления и т.д.); весь код, который не связан с этими понятиями, должен быть перенесен в другое место.

Ваше решение является хорошей отправной точкой, но мы не можем судить, поскольку у нас нет более подробной информации, и мы не знаем архитектуры вашего программного обеспечения. Что я могу сказать - и, надеюсь, вы уже знаете, - это то, что вы можете передать рендер (так, чтобы просмотреть систему шаблонов, я полагаю, вы используете веточку) непосредственно ArrayCollection, который вы получили, запрашивая базу данных (так что в основном вы не neeed CostModel []). Так что, может быть, ваш подход хорош, но не самый лучший: возможно, вы можете использовать средство репозитория, написать хороший запрос, который может извлекать и вычислять данные для вас (более оптимизированным образом) и использовать репозиторий непосредственно в контроллере. Таким образом, вы могли бы в то же время перенести код, где он должен оставаться, писать меньше строк кода, делать какой-то оптимизатор (или, лучше, позволить Doctrine делать для вас), и вам не нужно создавать совершенно новый класс (модель).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню