我在哪里将持久数据放在Catalyst中?

时间:2009-12-16 14:10:07

标签: perl catalyst

我正在编写一个Catalyst Web应用程序,它提供了一些在请求之间不会发生变化的数据。我想在应用程序启动时加载这些数据并将它们粘贴到某处,以便相关控制器可以使用它们。我应该在哪里加载这些数据以及我应该在哪里存储它?起初我尝试将其加载到主App.pm文件中并将它们放入应用程序配置中。这是有效的,但它很丑陋,因为App.pm文件被许多不属于一起的加载子堆积起来:

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

然后我想我可以在控制器中加载一些使用它们的数据并将它们存储在控制器的配置哈希中。这也不完美,因为在多个控制器中需要一些数据。

我还以为我可以将数据本地化到控制器而不是共享它们。这感觉很好,因为我会在一个地方或多或少地使用所有与数据一起工作的代码。问题是控制器还必须为其他控制器呈现结果页面的部分 - 例如,如果标题页控制器想要显示最近新闻的列表,则必须要求新闻控制器呈现列表。这似乎不是在Catalyst中做事的首选方式。

你会如何解决这个问题?

(数据的性质:这是一个音乐节的网站。有一个阵容,一个赞助商列表和从YAML文件中提取的其他简单数据,因为数据库太过分了,难以编辑。)

1 个答案:

答案 0 :(得分:3)

从根本上说,数据应该属于Model,也就是说你的YAML文件应该由应用程序模型中的模块表示。这就是您首先将模型与控制器分开的原因之一:您的所有控制器都可以与相同的模型进行通信,而无需在自身内部复制信息。

没有理由不能使用普通的perl数据结构或任何你喜欢的缓存技术来持久地在这些模块中缓存数据。