2

我正在编写一个 Catalyst Web 应用程序,它呈现一些在请求之间不会改变的数据。我想在应用程序启动时加载这些数据并将它们粘贴到某个地方,以便相关控制器可以使用它们。我应该在哪里加载这些数据,我应该在哪里存储它?起初我尝试将它加载到主App.pm文件中并将它们放入应用程序配置中。这可行,但很难看,因为该App.pm文件被许多不真正属于一起的加载潜艇乱七八糟:

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

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

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

你会如何解决这个问题?

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

4

1 回答 1

3

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

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

于 2009-12-16T14:34:15.523 回答