質問

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

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

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

では、この情報はどこで集めればよいのでしょうか?新しいモデルはテーブルにマッピングされませんか?ライブラリ関数/モジュール?または、他の何か?

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

編集:全体的に良い回答が得られ、多くの同意が得られ、安心しました。Railscasts へのリンクを上部に維持するために行った回答を「受け入れ」ました。Railscast の表示が遅れています。修正するために懸命に努力するつもりです。

役に立ちましたか?

解決

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

HTH

他のヒント

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

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

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top