我应该避免在公共API中暴露Lazy <t>类吗?

时间:2015-06-25 06:47:06

标签: c#-4.0 architecture lazy-evaluation

在库的公共接口设计中,如果我想要延迟初始化,返回Lazy<T>的实例是否合法?或者最好是通过封装或其他技术来隐藏Lazy<T>的使用?

2 个答案:

答案 0 :(得分:1)

对于以下情况,我认为你的意思是懒惰财产。

这取决于您的界面的目的。

消费者是否知道它是懒惰的,这是一个重要的细节吗?或者它只是一个技术细节,不应该改变消费者的行为。

你只有一个短暂的延迟,消费者不得处理,然后我倾向于喜欢Lazy并且只是直接暴露T。

如果消费者应该意识到并且可能适应这种行为,那么我会揭露懒惰。

但是在这种情况下,我会在大多数情况下暴露出一种方法,表明代码可能有副作用或可能需要一段时间。

答案 1 :(得分:0)

我看不出有任何理由直接在签名中公开Lazy<T>。在我的用例中,懒惰是实现细节。

如果长时间运行初始化,请不要在属性中使用它。在这种情况下,请提供一种考虑返回Task<T>的方法。