2011-01-22 14 views
2

Viewをオブジェクトに渡す必要があるのか​​、配列だけを受け取るのか不思議です。私はORMフレームワークを使用しています。したがって、プロジェクトビューページでは、プロジェクトオブジェクトのビューを渡して、プロジェクトのtodoListsとtodosをレンダリングさせることができます。MVC:オブジェクトの代わりに常にビューを表示する必要がありますか?

だから、現在、私の見解で私のようなコードを持っている:

foreach ($this->project->getTodoLists() as $todoList) { 
    // render lists 
    foreach ($todoList->getTodos() as $todo) { 
    // render todos 
    } 
} 

は、このOKですか?私はdoctrineの怠惰な読み込みで、get*()が呼び出されたときにSQLを実行すると思います。それはここで重要ですか?

または私のコントローラで、必要な情報をすべて純粋な配列に解析する必要がありますか?

私はPHP、Zend Framework 1.11、Doctrine 2 ORMを使用しています。しかし、私の意見で私が使用しているものは本当に問題ではありません。

+0

これらのクエリを遅延読み込みしている場合は、ビューまたはヘルパー関数でそのクエリを使用すると、HTMLをキャッシュし、キャッシュをリフレッシュする必要があるときにのみそのクエリを実行できます。 – scragz

+1

[実際のMVC](http://stackoverflow.com/questions/1549857/simple-php-mvc-framework/1549970#1549970)のパラダイムでは、ビューは実際にモデルと通信します。あなたの例は、PMVCまたはMVPの典型的なPHPフレームワークの変形です。この場合、あなたは望むようにすることができます。しかし、オブジェクトはしばしば読みやすくなります。 – mario

答えて

5

ビューレンダリングに非レイジーデータ型(つまり配列)を使用する1つの方法は、何も失敗しないことです。たとえば、オブジェクトの値が読み込まれ、呼び出される関数が失敗して(db、メモリ不足などで)終了すると、ビューレンダリングが破損する可能性があります(HTMLドキュメントのIEエラーメッセージ)。ビューに配列を渡すと、事前レンダリングされているので、どのデータにアクセスしても、どのような順序で配列しても問題ありません。

この問題は、出力バッファリングによってほとんど克服できますが、致命的なエラーなどの何かがキャッチされずにページに漏れることがあります。

もちろん、PHPのような言語では、怠惰はメモリスパイクを減らすのに役立ちます(必要に応じてレンダリングされ、レンダリングされるため)。CPU使用量(すべてのオブジェクトの評価が終了しない場合)

最終的には、あなたの意見がどのくらい複雑になるかがわかります。シンプルなデータ構造 - >シンプルなビュー、およびその逆。

+0

私はあなたが説明した問題のいくつか、例外にビューに漏れているのを経験しています。しかし@marioのように、「オブジェクトはしばしば読みやすくなります。 –

+0

それでは、致命的なエラーはアレイの構築中にどこで発生するのでしょうか? – Leven

関連する問題