Перемещение логики из Template Toolkit в Catalyst
Я думаю, что я использую слишком много условных выражений и вычислений в шаблонах TT.
Я показываю набор результатов из DBIc. Для каждого элемента мне нужно вычислить вещи, используя извлеченные значения, и шаблон, кажется, не является правильным местом.
Но в Catalyst это толстый объект, который исходит от DBIc.
Итак, как я могу переместить логику в модель? Должен ли я выполнить целый цикл для всех элементов и как-то изменить объект?
С уважением: Migue,
3 ответа
Во-первых, вы на правильном пути, желая правильно разделить проблемы. Вы поблагодарите себя, если будете сопровождающим через 6-12 месяцев.
ИМХО, ваши контроллеры Catalyst должны быть максимально тонкими с бизнес-логикой в различных моделях. Это облегчает тестирование, потому что вам не нужно иметь дело с Catalyst. Я немного думал о разделении моделей. Есть две школы мысли, с которыми я столкнулся:
1) Сделайте так, чтобы у ваших классов DBIx::Class Result была бизнес-логика. Этот подход удобен и прост.
2) Создайте автономную модель, которая создается экземпляром Controller и имеет объект схемы DBIx:: Class. Модель будет использовать схему DBIC для запроса базы данных, а затем использовать полученные данные в своих собственных методах бизнес-логики. Этот подход может быть лучше, если у вас много бизнес-логики, поскольку вы отделяете доступ к БД от бизнес-логики.
Лично я исторически использовал подход № 1, но я склоняюсь к #2 для больших приложений.
Две возможности
Создайте метод в соответствующем классе схемы.
(если 1 невозможно) Передайте обратный вызов в шаблон, который будет иметь этот объект в качестве аргумента.
Вы могли бы
- создать набор результатов, который извлекает данные из базы данных, а затем вычисляет необходимые значения
- если возможно, рассчитайте необходимые значения в базе данных, а затем получите только те данные, которые необходимы для вывода
Я лично предпочел бы второй. Надеюсь, это поможет.