Cur*_*ite 48 .net architecture collections linq-to-sql
我之前在这里发过这个问题但是我不满意我理解完整的后果.问题是返回类型应该是使用linq-to-sql的数据层返回以获得最大的灵活性和查询能力.这是我读过/发现的内容:
IEnumerable是有限的,只允许读取转发操作.IEnumerable是最通用的.我发现IEnumerable确实允许查询操作与扩展语法.
由于插入操作,List允许最大的灵活性.
应使用集合而不是列表来启用只读集合.
永远不应该使用IQueryable,它应该"使用和关闭".IQueryable不返回列表,但为数据库生成查询语法.
我觉得我对折衷有更好的感觉,但仍然不确定一些事情:
为什么我会选择具体类型的界面变体?即IList或ICollection与列表或集合.我会得到什么好处?
我看到扩展操作有效,但扩展的查询语法也能正常工作吗?
有人建议我之前使用AsQueryable().但是,如果我没有连接到数据库,为什么我会这样做呢?似乎扩展方法无论如何都有效.
Rex*_*x M 29
对于DAL返回,集合通常不是很有用,因为集合不会隐式保证顺序.这只是一桶物品.另一方面,IList隐含地保证秩序.所以我们归结为IEnumerable或IList.接下来的问题是:List对象是"实时"吗?即,是否连接到数据后备,以便在向IList添加项目时,它将反映在数据库中?对于LINQ-to-SQL,情况并非如此.相反,您应该将实体附加到表中.因此,除非您提供额外的布线,否则列表是多余的.坚持使用IEnumerable.
你应该总是返回一个接口而不是一个具体的类型,这不用说,因为它指定了允许的行为而不将消费者绑定到特定的实现.
就返回的接口而言,您应该考虑方法的目的和调用者的意图.如果您返回一个集合,调用者是否应该能够更改集合?例如,添加/删除项目?如果他们需要做的只是枚举它(做一个foreach)那么你应该只返回一个IEnumerable.
| 归档时间: |
|
| 查看次数: |
17728 次 |
| 最近记录: |