微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 数据对象属性的最佳实践:IEnumerable vs Array

@H_502_2@
简短的问题:将数据对象属性声明为IEnumerable是否可以,或者它应该是Array?

背景:

我刚刚在项目中发现了一个导致性能问题的错误.原因是IEnumerable已被多次迭代.但这只是初看起来很简单.我认为那里存在一个设计缺陷,允许这种情况发生.

更深入的研究表明,一种方法GetAllUsers返回了一个UsersResponse对象,其中一个属性是IEnumerable< T>. UsersList.当实现缓存时,显然整个UsersResponse对象被缓存,并且它在那时工作正常,因为GetAllUsers将一个数组分配给IEnumerable< T>. UsersList.稍后GetAllUsers的实现已经改变,并且由于某种原因,开发人员认为ToArray()调用是多余的.所以我认为问题在于UsersResponse对象没有经过精心设计,并为其工厂方法提供了太多的自由.另一方面,缓存包含IEnumerable属性的对象原则上也是无用的.

所以我们回到我的设计数据对象的问题:当你声明它时,不知道它将来会在某个时候被缓存,或者除了当前的需要之外它将如何以其他方式使用,是否可以声明它的属性为IEnumerable,是否需要谨慎使用其他开发人员,或者从一开始就必须是Array?

搜索过的内容

我发现的唯一建议是Jon Wagner’s blog post,他建议在构建后立即“密封”LINQ链.但这与构建IEnumerable相关,而不是将其存储在实体属性中.虽然结合原则尽可能返回特定类型,但它可能意味着将属性声明为Array.

@H_502_2@

解决方法

当我在考虑API设计时,我总是试图对消费者“好”.这意味着尽可能多地接受参数(如果可能),并尽可能多地提供返回值.如果您也购买它,则意味着您应该在提供Array(或类似)返回值的同时争取IEnumerable参数.结果是API的消费者的最大价值(即使最终是你自己). @H_502_2@ @H_502_2@
@H_502_2@
@H_502_2@

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐