APIにイーガーローディングにレイジー/遅延ローディングから変換するのに好ましい方法はありますか?

StackOverflow https://stackoverflow.com/questions/1924594

質問

私は今、しばらくの間(種のウェブサービスをラップする)APIに取り組んできた、そしてそのちょうど約機能の完全ます。

私は当初、このAPIは、怠惰な/を通じて遅延ロードされるように設計されました。これは、Webサービスを消費に固有の待ち時間与えられた利用可能なデータの小さなサブセットでのみ興味があるなら、完璧な意味があります。しかし、私は積極的なロードは、APIの消費者の方がはるかに簡単になり、いくつかのユースケースを考慮することができませんでした。

だから、私の質問は:あなたは主に遅延ロードは、クラスの熱心ロードされたバージョンを取得するためのメカニズムを公開しているAPIを見たいのですがどのように

私はexplicitキャストに傾いていますが、より詳細な場合Eager.AsEager(SomeDelayLoadingObject)の線に沿って何かも自然に感じます。

役に立ちましたか?

解決

私が実際にやってしまったことは、私がいない機能コードではなく、すべて同じプロパティを持つ熱心にロードされ、クラスになりたかったクラスの簡易コピーを作成していた。

私は、熱心> lazy-から、2人の暗黙のキャストを定義し、eager->怠惰。どちらのキャストはすべてのプロパティをコピーしました。それが必要だった場合、それによって任意のロードをトリガーます。

私は、これは完璧なソリューションであるとは思いませんが、

、それは熱心に変えるだけのタイプをロードます。何のコードの変更は必要ありません。

他のヒント

あなたのAPIは、Webサービスをラップしているので、あなたのAPIは、プロキシとして多かれ少なかれ演技です。私は、プロキシ自体に、またはプロキシのコンテキストのいくつかの種類にはなく、クラスにロード動作をかけることになります。

// Basic: Every operation through the proxy uses Eager loading
using (var proxy = new ApiProxy(Loading.Eager))
{
  var result = proxy.DoSomething();
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top