2012-01-31 8 views
1

私は現在、個人用プロジェクトとして単純な予算作成アプリケーションを開発中です。これはZend Framework上に構築され、MVCアーキテクチャとデータマッパーパターンを使用します。コントローラは、データマッパを介してドメインモデルエンティティを格納および受信し、それらをビューに渡します。データマッパーは、Zend Db Adapterを介してプリペアドステートメントを実行します。zend frameworkのレイジーローディングコレクション

ドメインモデルは、多くのトランザクションと多くの予算カテゴリを持つユーザーで構成されています。各トランザクションはカテゴリに割り当てることができます。

アーキテクチャは、単純なCRUD操作のための十分動作しますが、重大な欠点のカップルを持っています

  • すべてのパフォーマンスの最初の。ユーザーオブジェクトはすべての要求に対してインスタンス化され、データマッパーは自動的にそのユーザーのすべての予算カテゴリをデータベースから取得します。これらは、子トランザクションレコードをデータベースから引き出します。これは明らかに非効率的です。
  • 第2に、複数のモデルエンティティまたはエンティティのサブセット(特定の期間の一連のトランザクションなど)を処理する場合、コントローラには多くのコードがあります。私はこのコードをどこに置くべきか確信しています。

遅延負荷は、パフォーマンスの問題の明らかな解決策のようです。しかし、私はデータマッパーとオブジェクトのコレクションでこれを実装する方法は不明です。特に、クライアントコードがコレクションのサブセットのみを要求する場合、遅延ロードはどのように動作するのですか?

答えて

0

私は助けができませんが、パトリック・ブレイディができます。
Lazy loading Domain Objects
「サベイビング・ザ・ディープエンド」の第9.6.4章と第9.6.5章を参照してください。彼はあなたが求めていることを正確に説明します。

+0

私はその本のアイディアが最高だとは思わない。 'AuthorMapper'を' User'エンティティに注入することは良い考えのようには思えません。 – Optimus

+0

@boosisおそらく、彼が選んだ実装はあなたのアプリケーションには最適ではありませんが、彼が記述するテクニックは、あなたが感じている問題を解決するための基礎を提供するべきです。 – RockyFord

+0

@RockyFordありがとうございました。私はモデルについての章を読んだことがありますが、コレクションを扱う方法はもちろん、遅延ロード時に条件を追加する方法については言及していません。 – James