3

私は、MVC を使用して構築されたアプリケーションを持っています。このアプリケーションは、多数のモデルにわたって要約情報を提供するビューを生成します。さらに、いくつかの計算は、さまざまなデータ セットに対して実行されます。

このための開始点として意味があると思われる明確な単一モデル (少なくともテーブルにマップされる) はありません。そのため、さまざまな要約がコントローラー内の寄与モデルから引き出され、ビューに渡され、そこで計算が実行されます。 .

しかし、それはまあ、汚いようです。でもコントローラーは軽いはずですよね?また、ビジネス ロジックはビューに含めるべきではありません。

では、この情報はどこで収集する必要があるでしょうか。テーブルにマップされない新しいモデルですか? ライブラリ関数/モジュール? または、他の何か?

(これは主にアーキテクチャ/パターンに関する質問だと思いますが、Rails、FWIW で作業しています。)

編集:全体的に良い答えであり、多くのコンセンサスがあり、心強いです。Railscastsへのリンクを一番上に保つために行った回答を「受け入れ」ました。Railscast の表示が遅れています。これを修正するために精力的な試みを行う必要があります。

4

5 に答える 5

3

ブライアンが言ったように、必要な作業を整理する別のモデルを作成できます。この種のことを行う方法については、優れた Railscastがあります。

HTH

于 2008-08-25T21:53:18.987 に答える
1

コントローラーは、特定のモデルまたはビューにマップする必要はありません。モデルはデータベース テーブルに 1 対 1 でマッピングする必要はありません。それがフレームワークの考え方です。すべてを個別にテストできる懸念事項の分離。

于 2008-08-26T01:52:25.840 に答える
1

そこでロジックを継承して実行しないモデルを作成してみませんかActiveRecord::Base(Agile の Cart クラスを考えてみてください...With Rails)。

于 2008-08-25T20:46:38.337 に答える
0

ロジックをビューに入れたくありません。ただし、データベース ビューは自由に作成できます。ただし、データベース側で作成するのではなく、新しいモデルとして作成してください。これにより、計算と実際のロジックを 1 か所で実行できます。ビューを同期させようとする苦労と、新しいモデルを作成するための 1 回限りの「苦労」… 私は新しいモデルに投票します。

于 2008-08-26T01:26:04.013 に答える
0

コントローラーはそれほど軽量である必要はありません。

ただし、モデルのみに依存する計算がある場合は、おそらく、モデルが計算を実行するための何らかのモデル ラッパーが必要になるだけです。その後、それをビューの API に配置して、ビューが最終結果を取得できるようにします。

于 2008-08-25T20:46:13.033 に答える