0

私はしばらくの間 API (一種の Web サービスをラップする) に取り組んできましたが、その機能はほぼ完成しています。

私は当初、この API を全体的に遅延/遅延ロードするように設計しました。これは、Web サービスの使用に固有のレイテンシーを考慮して、利用可能なデータの小さなサブセットのみに関心がある場合に完全に理にかなっています。ただし、API のコンシューマーにとってイージー ロードがはるかに簡単になるいくつかのユース ケースを考慮していませんでした。

ですから、私の質問は次のとおりです。主に遅延読み込みである API が、クラスの熱心に読み込まれたバージョンを取得するためのメカニズムをどのように公開することを望みますか?

私はキャストに傾いていますが、より冗長であればexplicit、のラインに沿ったものも自然に見えます。Eager.AsEager(SomeDelayLoadingObject)

4

2 に答える 2

0

私が実際にやったのは、熱心にロードしたいクラスの浅いコピーを作成することでした。クラスには関数型コードはありませんが、すべて同じプロパティがあります。

次に、lazy->eagerとeager->lazyの2つの暗黙的なキャストを定義しました。両方のキャストがすべてのプロパティをコピーしました。これにより、必要に応じてロードがトリガーされます。

これは完璧な解決策ではないと思いますが、タイプを変更するだけで熱心にロードできます。コードを変更する必要はありません。

于 2009-12-21T23:01:03.440 に答える
0

API は Web サービスをラップしているため、API は多かれ少なかれプロキシとして機能しています。クラスではなく、プロキシ自体、またはある種のプロキシ コンテキストに読み込み動作を配置します。

// Basic: Every operation through the proxy uses Eager loading
using (var proxy = new ApiProxy(Loading.Eager))
{
  var result = proxy.DoSomething();
}
于 2013-03-22T19:14:04.953 に答える