映射单个对象还是多个对象?

时间:2012-01-10 02:01:16

标签: model-view-controller zend-framework datamapper

正如您可以想象的那样,涉及条款(以任意组合)“多个,表格,对象”的搜索会返回大量不是特定于我的特定问题的页面 - 而且我不完全确定如何说出它,所以我举一个例子:

说我有这些表:'用户','项目'和'ProjectNotes'。在任何给定的视图(使用MVC模式)我可能想要调用有关一个或多个项目的信息并显示有关其父母用户和子注释的信息 - 或者为了有更具体的场景,让我们说我想要有一个视图,显示有关单个项目的信息及其子注释,也可能是对父用户的名字和姓氏的引用。

在这种情况下,我应该映射一个包含所有必需数据的对象并将其传递给视图,还是应该映射特定项目,使用其'user_id'外键来映射相应的用户对象,映射所有项目的子项记录为对象,并将这组对象发送到视图?

感谢您抽出时间阅读本文。

1 个答案:

答案 0 :(得分:1)

让我感到沮丧,无论哪种方式都很好。但我倾向于后者:将所有的每个记录数据组合成一个数组/对象并将其传递给视图。

最终,在操作中您可以轻松获得哪些数据的细节取决于您的查询,ORM,由查询/映射器/ ORM生成的对象图等。但假设您的联接查询生成了拥有Note和User成员的项目,你可以在你的行动中做这样的事情:

$project = $repository->getProject(); // however this is done
$this->view->projectData = array(
   'name' => $project->name,
   'date' => $project->date,
   'user_name' => $project->User->name,
   'user_email' => $project->User->email,
   'note' => $project->Note->content,
);

也就是说,视图不需要知道对象图;这些知识存在于控制器/动作及以上级别。该操作从图形中解开数据并将其重新打包为一个简单的表单(数组),以便呈现视图。

您甚至可以将其推送到表示$project的中间视图模型对象 - 在构造函数中接受$project对象/图形的对象,但它是不可变且只读的。然后将此视图模型对象传递给视图进行渲染。

相关问题