Я пишу веб-приложение Catalyst, которое представляет некоторые данные, которые не меняются между запросами. Я хочу загрузить эти данные при запуске приложения и вставить их куда-нибудь, чтобы соответствующие контроллеры могли их использовать. Где я должен загрузить эти данные и где я должен их хранить? Сначала я попытался загрузить его в основной файл App.pm
и поместить в конфигурацию приложения. Это работает, но это уродливо, поскольку файл App.pm
завален множеством загрузочных сабвуферов, которые на самом деле не принадлежат друг другу:
__PACKAGE__->config(this => load_this());
__PACKAGE__->config(that => load_that());
# et cetera
Тогда я подумал, что мог бы загрузить некоторые данные в контроллер, который их использует, и сохранить их в хеше конфигурации контроллера. Это также не идеально, потому что некоторые данные необходимы более чем в одном контроллере.
Я также думал, что смогу локализовать данные на контроллере вместо того, чтобы делиться ими. Это приятно, потому что у меня был бы весь код, который работает с данными более или менее в одном месте. Проблема заключается в том, что контроллеру также придется отображать части получающейся страницы для других контроллеров - например, если контроллер титульной страницы хочет отобразить список последних новостей, ему придется попросить контроллер новостей отобразить этот список. Похоже, это не самый предпочтительный способ работы в Catalyst.
Как бы вы решили это?
(Характер данных: это веб-сайт музыкального фестиваля. Существует список, список спонсоров и другие простые данные, извлеченные из файлов YAML, поскольку база данных будет излишней и ее трудно будет редактировать.)