私は現在、Zend Frameworkプロジェクトに取り組んでいます。これにより、ユーザーがアプリケーションを移動した結果、結果を含む大きなテーブルが表示されます。このテーブルにはさまざまな数の行を含めることができ、そのほとんどは計算の結果として生成されます。ここまでは順調ですね。
最初; 小さなハードルはありますが、テーブルを水平に表示する必要があるということです。つまり、見出しは列1にあり、追加の各列はデータエンティティ項目を表します。例えば:
フォアネーム| ジェームズ| リチャード 姓| ジョーンズ| メイフェア
繰り返しますが、これは問題ではありません。私がテーブルをきちんと構築するようになると、問題が発生します。ビルダーパターンを使用して、テーブル、グループ、行の3つのクラスがあります。これらは次のように使用できます。
$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;
}
さらに、resultsオブジェクトは、生データのアクセサー、セッター、および計算メソッドを含む結果抽象クラスを拡張します。これらの「計算」メソッドはそれぞれ、行オブジェクトに割り当てることができるデータの連想配列を返します。結果オブジェクトと抽象化されたクラスはどちらも長く、ばらばらに見えます。
要約すると...すべての計算を実行し、すべての行オブジェクトを返す1つの大きな結果モデルになりました。それは機能しますが、私は物事を行うためのより良い方法があると確信しています。コントローラで行を作成する必要がありますか?モデルからの計算のみを呼び出す必要がありますか?誰かがこのようなものを抽象化した経験がありますか?
申し訳ありませんが、これは不十分な説明です。誰かが私が答えることができる質問があれば、私に知らせてください。