Где я могу разместить постоянные данные в Catalyst? - PullRequest
2 голосов
/ 16 декабря 2009

Я пишу веб-приложение Catalyst, которое представляет некоторые данные, которые не меняются между запросами. Я хочу загрузить эти данные при запуске приложения и вставить их куда-нибудь, чтобы соответствующие контроллеры могли их использовать. Где я должен загрузить эти данные и где я должен их хранить? Сначала я попытался загрузить его в основной файл App.pm и поместить в конфигурацию приложения. Это работает, но это уродливо, поскольку файл App.pm завален множеством загрузочных сабвуферов, которые на самом деле не принадлежат друг другу:

__PACKAGE__->config(this => load_this());
__PACKAGE__->config(that => load_that());
# et cetera

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

Я также думал, что смогу локализовать данные на контроллере вместо того, чтобы делиться ими. Это приятно, потому что у меня был бы весь код, который работает с данными более или менее в одном месте. Проблема заключается в том, что контроллеру также придется отображать части получающейся страницы для других контроллеров - например, если контроллер титульной страницы хочет отобразить список последних новостей, ему придется попросить контроллер новостей отобразить этот список. Похоже, это не самый предпочтительный способ работы в Catalyst.

Как бы вы решили это?

(Характер данных: это веб-сайт музыкального фестиваля. Существует список, список спонсоров и другие простые данные, извлеченные из файлов YAML, поскольку база данных будет излишней и ее трудно будет редактировать.)

1 Ответ

3 голосов
/ 16 декабря 2009

По сути, данные должны принадлежать модели, то есть ваши YAML-файлы должны быть представлены модулями в модели вашего приложения. Это одна из причин, по которой вы в первую очередь отделяете модель от контроллеров: все ваши контроллеры могут общаться с одними и теми же моделями, не копируя свою информацию внутри себя.

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

...