在API中从Lazy / Delay-loading转换为Eager-loading的首选方法?

时间:2009-12-17 21:05:55

标签: c# api lazy-loading eager-loading api-design

我一直在研究一种API(它包含各种各样的网络服务)已经有一段时间了,它的功能已经完成了。

我最初将此API设计为延迟/延迟加载;考虑到使用Web服务时固有的延迟,如果您只对可用数据的一小部分感兴趣,这是完全合理的。但是,我没有考虑一些用例,在这些用例中,API的消费者可以更加轻松地进行加载。

所以,我的问题是:您希望看到一个主要是延迟加载的API公开一种机制来获取急切加载的类版本吗?

我倾向于explicit演员,但如果更加冗长,Eager.AsEager(SomeDelayLoadingObject)的某些内容似乎也很自然。

2 个答案:

答案 0 :(得分:0)

我实际上最终做的是创建一个我想要加载的类的浅表副本,没有功能代码但具有所有相同属性的类。

然后我定义了两个隐式转换,来自lazy-> eager和eager-> lazy。两个演员都复制了所有属性;从而在需要时触发任何负载。

虽然我认为这不是一个完美的解决方案,但它只是急切地加载简单的类型;不需要更改代码。

答案 1 :(得分:0)

您的API正在包装Web服务,因此您的API或多或少充当代理。我会将加载行为放在代理本身上,或者放在某种代理上下文上,而不是放在类上。

// Basic: Every operation through the proxy uses Eager loading
using (var proxy = new ApiProxy(Loading.Eager))
{
  var result = proxy.DoSomething();
}