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