2

リクエスト間で変更されないデータを表示する Catalyst Web アプリケーションを作成しています。アプリケーションの起動時にこのデータをロードし、関連するコントローラーが使用できるようにどこかに貼り付けたいと思います。このデータをどこにロードし、どこに保存すればよいですか? App.pm最初に、メインファイルにロードして、アプリケーション構成に入れようとしました。これは機能しApp.pmますが、実際には一緒に属していない多くの読み込みサブルーチンによってファイルが散らばっているため、醜いです:

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

次に、それらを使用するコントローラーにデータの一部をロードし、コントローラーの構成ハッシュに保存できると考えました。一部のデータは複数のコントローラーで必要になるため、これも完全ではありません。

また、データを共有するのではなく、コントローラーにローカライズできると考えました。データを操作するすべてのコードを多かれ少なかれ 1 か所にまとめることができるので、これはいい感じです。問題は、コントローラーが結果のページの一部を他のコントローラーにもレンダリングする必要があることです。たとえば、タイトル ページ コントローラーが最近のニュースのリストを表示したい場合、ニュース コントローラーにリストをレンダリングするように依頼する必要があります。これは、Catalyst での推奨される方法ではないようです。

これをどのように解決しますか?

(データの性質: これは音楽祭の Web サイトです。データベースは過剰で編集が難しいため、ラインナップ、スポンサーのリスト、および YAML ファイルから抽出されたその他の単純なデータがあります。)

4

1 に答える 1

3

基本的に、データはモデルに属している必要があります。つまり、YAMLファイルはアプリケーションのモデルのモジュールで表されている必要があります。これが、最初にモデルをコントローラーから分離する理由の1つです。すべてのコントローラーは、情報を複製しなくても、同じモデルと通信できます。

プレーンなperlデータ構造または任意のキャッシュ手法を使用して、これらのモジュールにデータを永続的にキャッシュできない理由はありません。

于 2009-12-16T14:34:15.523 に答える