User
というオブジェクトがあります。このオブジェクトはUsermapper
によって生成されます。 User
オブジェクトは、使用しているデータベース/リポジトリについては何も知らない(私は良いデザインだと思う)。データベースとやりとりする関数のベストプラクティス
User
を作成するときは、マッパーによって最も些細なことで埋め尽くされるだけです。しかし、オブジェクトのインスタンス化後には、私はこの比較的高価な操作をすべてのユーザーのインスタンス化(複数のテーブルが必要など)に行わないようにするために、userX.getTotalDebt()
のメソッドを持つかもしれません。getTotalDebt()
はデータベースに再接続する必要があります。もし私が単にgetTotalDebt()
にいくつかのSQLを挿入するか、または連結性が非常に速くなっているMapper
への依存関係に戻ってください。
状況が頻繁に発生するため、明らかに良い/ベストプラクティスがありますが、見つからないか、間違った角度からこの問題を完全に見ています。
次に、あなた/ ORMはどこでgetTotalDebt()メソッドの機能を実装しましたか?マッパーでのインスタンシエーションでは、具体的には、データベースにもっと多くのテーブルを追加することによって?私はあなたがあまりにも透明なプロキシ/レイジーの読み込みメソッドを嫌い行の間で読んだので。 – hbogert
レイジーローディングは、データベース例外をデータレイヤーの外に移動させ、慎重ではない場合に多くのSQLクエリを生成する可能性があります。結合を行い、完全なリストを返す方がよいでしょう。 – jgauffin
これまでの洞察をありがとう。これまでのところ私は参加ソリューションにはかなり満足していました。しかし、これはかなり面倒なことになってきています。既に私は、オブジェクト作成を遅くしているgroupby節を使用し始めています。 – hbogert