2

モデルの設計に関しては、これから始めようとしている新しいプロジェクトに最適なアプローチを決定しようとしています(そして、Dapper.netを使用しています)。

モデルに外部キープロパティではなくオブジェクトを使用するというアイデアが好きです。

public Post LastPost { get; set; }

vs

public int LastPostId { get; set; }

ただし、この種のクリーンなアプローチを実装する場合は、すべてのオブジェクトにマルチマッピングする必要があります(これにより、オブジェクト内のオブジェクトの循環参照が発生する可能性があります(または、特定のポイントでマルチマッピングを停止する必要があるため、最終的にはオブジェクトツリーのある時点でNULLオブジェクト)。また、ある程度マルチマップを実行すると、必ずしも必要になるとは限らないときに、不要な作業を引き起こしたり、結合を実行したりする可能性があります。

または、マルチマッピングを使用して「必要に応じて」オブジェクト内にオブジェクトを設定することにした場合(一部のリポジトリメソッドでは、必要に応じてマルチマッピングを実行します。他のリポジトリメソッドでは、オブジェクトをわざわざ入力しないでください。 )、オブジェクト(オブジェクト内)がnullかどうかを常に確認できるとは限らないという点で、ちょっと汚い感じがします。

私は過去にNHibernate(または少なくともそのより基本的な機能の一部)を使用しましたが、モデル内に常にオブジェクトがあり、必要な場合は遅延読み込みに依存して取得できるため、ジレンマはありませんでした-しかし、Dapper.netで遅延読み込みがないので、最善のアプローチが本当にわかりませんか?

4

2 に答える 2

4

両方の長所を持ってみませんか?

bool _lastPostLoaded;
private Post _lastPost; 
public Post LastPost 
{ 
   get 
   {
      if(!_lastPostLoaded)
      {
         _lastPost = cnn.Query<Post>("select * from Posts where Id = @lastPostId", 
              new {lastPostId});
         _lastPostLoaded = true;
      }
      return _lastPost;
   } 
   set 
   {
      _lastPost = value;
      _lastPostLoaded = true;
   }
}

これにより、必要なときにマルチマッピングと遅延読み込みを使用して、遅延したときに積極的に読み込みを行うことができます。

于 2011-08-17T09:51:48.407 に答える
0

良い、遅延読み込みプロキシパターンです。

于 2013-04-06T12:25:28.883 に答える