Перемещение логики из 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. Создайте метод в соответствующем классе схемы.

  2. (если 1 невозможно) Передайте обратный вызов в шаблон, который будет иметь этот объект в качестве аргумента.

Вы могли бы

  1. создать набор результатов, который извлекает данные из базы данных, а затем вычисляет необходимые значения
  2. если возможно, рассчитайте необходимые значения в базе данных, а затем получите только те данные, которые необходимы для вывода

Я лично предпочел бы второй. Надеюсь, это поможет.

Другие вопросы по тегам