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;
}
}
...
}
私たちのチームの開発者の 1 人は、上記の状況でのインデクサーは適切ではなく、GetUser(Guid id)
メソッドを優先すべきであると主張しています。
引数は次のとおりです。
1) インメモリ コレクションにインデックスを作成していません。インデクサーは基本的に非表示の SQL クエリを実行しています 2) インデクサーで Guid を使用するのは良くありません (FxCop はこれにもフラグを立てました) 3)null
インデクサーから戻るのは通常の動作ではありません4) API ユーザーは通常、このような動作を予期しません。
私はこれらの点(のほとんど)にある程度同意します。
しかし、Linq の特徴の 1 つは、データベース アクセスを抽象化して、単に多数のコレクションを操作しているように見せかけることだとも主張しがちです。遅延評価パラダイムは、これらのコレクションが評価されないことを意味しますがそれらに対してクエリを実行するまで。ここで具体的なメモリ内コレクションであるかのようにデータストアにアクセスすることは、私には矛盾しているようには見えません。
また、これはこのパターンを広範かつ一貫して使用する継承されたコードベースであることを念頭に置いて、リファクタリングする価値はありますか? 最初から Get メソッドを使用したほうがよかったかもしれないことは認めますが、インデクサーを使用することが完全に間違っているとはまだ確信していません。
私はすべての意見を聞くことに興味があります、ありがとう。