class UserDatastore : IUserDatastore
{
...
public IUser this[Guid userId]
{
get
{
User user = (from u in _dataContext.Users
where u.Id == userId
select u).FirstOrDefault();
return user;
}
}
...
}
一个在我们的团队开发人员争辩说,在上述情况下的索引是不恰当的,并且一个GetUser(Guid id)
方法应优先。使用索引从数据存储检索的LINQ to SQL对象
的论据在于:
1)我们不是索引到内存中的集合,索引基本上是执行一个隐藏的SQL查询 2)在索引使用GUID是坏的(标记的FxCop这也) 3)从分度器返回null
不正常行为 4)的API用户通常不希望任何的这种行为
我同意的程度与(大部分)这些点。
但我也倾向于认为,Linq的特点之一是抽象数据库访问,使它看起来你只是在处理一堆集合,尽管懒惰的评估范例意味着那些集合直到您对它们运行查询才会被评估。我以同样的方式访问数据存储区似乎并不矛盾,就好像它是一个具体的内存中的集合。
还要记住,这是一个广泛而一致地使用这种模式的继承代码库,值得重构吗?我承认从一开始就使用Get方法可能会更好,但我还不确定使用索引器是完全不正确的。
我很想听听所有的意见,谢谢。
- 由于连接已经建立,数据库查询可能不会像内存查询一样快吗? – fearofawhackplanet 2010-04-15 13:00:36