我应该在哪里放置包含上述查询的方法。应该是 UserRepository(以这种方式,我可能会以 god 类结束,这是一种不好的做法)?或者我应该创建类架构来处理这个问题。
我想知道你对此有何看法。您认为哪种类结构最通用且最容易重用。
我想,我可以使用存储过程作为重复查询的地方,但我不想那样做。
最佳答案
是的,它可以在UserRepository中, 但你也可以建立一个 Godclass用于标准化查询(创建、删除等)并使用 Service Layer或 Extensions从 GetAll() 中过滤结果UserRepository 中的方法.
更新
我试图更详细地展示它。
构建一个通用存储库,其中包含用于检索/存储数据的所有语句。
创建一个从存储库消费/发送到存储库的服务层。
添加扩展方法以过滤特定结果。 (以 c# 3.0 为特色)
部分代码:
// Repository (non-generic)
private IQueryable<User> GetUser()
{
var results = from u in _db.Users
select new User
{
ID = u.ID,
Username = u.Username,
// and so on
};
return results;
}
//Service Layer
private User GetUser(string Username)
{
User u = _repository.GetUser().WithUsername(username)
.SingleOrDefault();
}
// Extension Method
public static IQueryable<User> WithUsername(this IQueryable<User> qry, string username)
{
return from u in qry
where u.Username == username
select u;
}
此方法与 Rob Conerys MVC StoreFront Preview 相关。其他项目的实现可能会有所不同,但这是一种实现方式。