当前位置:  开发笔记 > 编程语言 > 正文

数据访问层:公开列表<>:坏主意?

如何解决《数据访问层:公开列表<>:坏主意?》经验,为你挑选了1个好方法。

我目前正在编写一个简单的数据访问层,我想知道我应该向其他层公开哪种类型.

我将在内部实现数据作为列表<>,但我记得在不需要的情况下阅读有关不向消费者公开List类型的内容.

public List GetAllUsers() // non C# users: that means List of User :)

你知道为什么(谷歌没有帮助)?你经常为那种东西揭露什么?IList的?IEnumerable的?



1> Konrad Rudol..:

通常最好暴露用户仍可以有意义地使用的功能最少的接口.如果用户只需要一些可枚举的数据,请返回IEnumerable.如果这还不够,因为用户需要能够修改列表(注意!通常不应该这样),返回一个IList.

/编辑:

Joel在他的评论中提出了一个有效的问题:为什么确实暴露了功能最少的界面,而不是授予用户最大的权力?(转述)

这背后的想法是返回数据的方法可能不希望用户修改其内容:类的另一个方法可能仍然期望在返回对它的引用之后该列表为非空.想象一下,用户从列表中删除所有数据.另一种方法现在必须另外检查ele可能是不必要的.

更重要的是,这通过返回类型公开了部分内部实现.如果我将来需要更改实现以便它不再使用IList容器,我就会遇到一个问题:我要么需要更改方法契约,要么引入一个破坏性的更改.或者我需要将数据复制到列表容器中.

作为一个例子,假设一个有效的实现使用Dictionary并且只返回Values未实现的集合IList.

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有