我目前正在开发一个 Zend Framework 项目,用户浏览应用程序的最终结果向他们展示了一个包含他们结果的大表。该表可以包含不同数量的行,其中大部分是作为计算结果生成的。到目前为止,一切都很好。
首先; 尽管障碍很小,但表格需要水平呈现。也就是说,标题在第 1 列中,每个附加列代表一个数据实体项。例如:
姓名 | 詹姆斯 | 理查德 姓氏 | 琼斯 | 梅菲尔
同样,这不是问题。当我来整齐地构建桌子时,问题就出现了。使用构建器模式,我有三个类:Table、Group 和 Row。它们可以这样使用:
$table = new Table($attribs);
$group = new Group(); // Nothing special about groups, they're just there for helping with presentation
$row = new Row();
$row->setTitle('Forename')
->setData(array('item1' => 'James', 'item2' => 'Richard'))
$row2 = new Row();
$row2->setTitle('Surname')
->setData(array('item1' => 'Jones', 'item2' => 'Mayfair'))
$group->addRow($row)
->addRow($row2);
$table->addGroup($group);
上面的代码片段出现在控制器的操作中。然后将表对象传递给视图,并且我有一个视图助手,可以根据我自己的规范输出到表中。
然而,我面临的挑战是我最终得到了一个非常混乱的“结果”模型。例如,我有很多:
$group->addRow($this->_resultsModel->getSurnameRow());
'_resultsModel' 属性是一个包含许多方法的对象:
public function getSurnameRow()
{
$row = new Row();
$row->setTitle('Surname');
$row->setData($this->_getAssociateArrayOfSurnames());
return $row;
}
此外,结果对象扩展了一个结果抽象类,其中包含原始数据的访问器、设置器和计算方法。这些“计算”方法中的每一个都返回可以分配给行对象的关联数据数组。结果对象和抽象类都很长,而且看起来很脱节。
总结一下……我最终得到了一个大型结果模型,它执行所有计算并返回所有行对象。虽然它确实有效,但我相信有更好的做事方式。我应该在控制器中构建行吗?我应该只从模型中调用计算吗?有没有人有任何抽象这样的东西的经验?
我很抱歉,这是一个糟糕的解释。如果有人有任何我可以提出的问题,请告诉我。