Перемещение логики из Template Toolkit в Catalyst - PullRequest
3 голосов
/ 12 января 2012

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

Я отображаю набор результатов из DBIc. Для каждого элемента мне нужно вычислить вещи, используя полученные значения, и шаблон, кажется, не является правильным местом.

Но в Catalyst это толстый объект, полученный из DBIc.

Так как я могу переместить логику в модель? Должен ли я выполнить целый цикл для всех элементов и как-то изменить объект?

С уважением: Migue,

Ответы [ 3 ]

5 голосов
/ 17 января 2012

Во-первых, вы на правильном пути, желая правильно разделить проблемы.Вы будете благодарны, если будете сопровождать вас через 6-12 месяцев.

ИМХО, ваши контроллеры Catalyst должны быть максимально тонкими с бизнес-логикой в ​​различных моделях.Это облегчает тестирование, потому что вам не нужно иметь дело с Catalyst.Я немного думал о разделении моделей.Я сталкивался с двумя школами мысли:

1) Сделайте так, чтобы у ваших классов DBIx :: Class Result была бизнес-логика.Этот подход удобен и прост.

2) Создайте автономную модель, созданную экземпляром Controller и имеющую объект схемы DBIx :: Class.Модель будет использовать схему DBIC для запроса базы данных, а затем использовать полученные данные в своих собственных методах бизнес-логики.Этот подход может быть лучше, если у вас много бизнес-логики, поскольку вы отделяете доступ к БД от бизнес-логики.

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

1 голос
/ 12 января 2012

Две возможности.

  1. Создать метод в соответствующем классе схемы.

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

0 голосов
/ 13 января 2012

Вы можете

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

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

...