2012-05-02 7 views
0

クリーンなMVCでは、データベースからデータを収集し、レンダリングするビューに渡します。MVC - ビュー内のデータソースコンテナ

ビューロジックがいくつかの要素を描画しないことを選択したとしても。

すべてのデータベースクエリを持つコンテナを準備するのはきれいですが、ビューがこのコンテナを反復処理し始めたときに、コンテナ内のデータを取得するのはイテラブルですコントローラ内のデータを取得していますか?

補遺

は私がビューにオーバー渡しているコンテナはのはExpensiveObjectProviderそれを呼びましょう、「の種類」モデルです。このコンテナがビューに渡されたときに、データはまだデータベースからフェッチされていません。

コンテナによってカプセル化されたオブジェクトは高価になる可能性があります。私がコントローラでそれをやっているのが唯一の理由は、エラー処理(データベースクエリのエラーの場合、接続の問題など)です。コントローラ内のデータベースから最初の1-2-3オブジェクトをプリフェッチし、ビューにコンテナを渡し(例外が発生していない場合)、ビューがプリフェッチされたデータを消費するようにすることは良いトレードオフと考えますか?コンテナが反復されるときに新しい項目を取得しますか?

答えて

0

通常、データベースコードはビューには入りません。モデルにはモデルがあり、モデルに依存するDAOはありません。ビュー内の論理はテストするのが難しく、データベースにアクセスするコードがあれば非常に面倒です。

+0

はい、ビューに渡すコンテナはモデルの一種です。このコンテナがビューに渡されたときに、データはまだデータベースからフェッチされていません。 – Flavius

+0

さて、私は今理解しています。データベースコードがモデル内にカプセル化されている場合は、ビューで必要なときにクリーンアップされます。 –

+0

コンテナによってカプセル化されたオブジェクトは高価になる可能性があります。私がコントローラでそれをやっているのが唯一の理由は、エラー処理(データベースクエリのエラーの場合、接続の問題など)です。コントローラ内のデータベースから最初の1-2-3オブジェクトをプリフェッチし、ビューにコンテナを渡し(例外が発生していない場合)、ビューがプリフェッチされたデータを消費するようにすることは良いトレードオフと考えますか?コンテナが反復されるときに新しい項目を取得しますか? – Flavius

0

ビューは、そのようなロジックを生成しません。コントローラは表示するデータを表示します。コントローラは、このデータをモデルから取得します。

関連する問題