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)
应该首选一种方法。
论据是:
1) 我们没有对内存中的集合进行索引,索引器基本上是在执行隐藏的 SQL 查询 2) 在索引器中使用 Guid 是不好的(FxCop 也标记了这一点) 3)null
从索引器返回不是正常行为4) API 用户通常不会期望任何这种行为
我在一定程度上同意(大部分)这些观点。
但我也倾向于争辩说,Linq 的一个特点是抽象数据库访问以使您看起来只是在处理一堆集合,即使惰性评估范式意味着这些集合不被评估直到您对它们运行查询。以与此处具体的内存中集合相同的方式访问数据存储区对我来说似乎并不矛盾。
还要记住,这是一个继承的代码库,它广泛且一致地使用这种模式,是否值得重构?我接受从一开始就使用 Get 方法可能会更好,但我还不相信使用索引器是完全不正确的。
我很想听听所有的意见,谢谢。