查询对象模式vs LINQ



我正忙于一个新项目,正在开发我的存储库层。这将是我使用存储库模式的第二个项目。我一直在读Scott Millett的书Professional ASP。. NET设计模式在参考书中的案例研究时,Scott在他的存储库接口中使用了查询对象模式。在我以前的项目中,我使用LINQ来实现这个目的,它工作得很好。

我的问题如下:在存储库中使用查询对象模式实现与使用LINQ的优缺点是什么?

这里有两个场景来说明这两种不同的方法:

1。查询对象模式方法

public interface IReadOnlyRepository<T, TId> where T : IAggregateRoot
{
    T FindBy(TId id);
    IEnumerable<T> FindAll();
    IEnumerable<T> FindBy(Query query);
}

2。LINQ方法

public interface IReadOnlyRepository<T, TId> where T : IAggregateRoot
{
    T FindBy(TId id);
    IQueryable<T> FindAll();
    IQueryable<T> FindBy(Expression<Func<T, bool>> query);
}

虽然我认为LINQ的表达式树只是查询对象模式的一种特殊形式,但由于它们更大的灵活性,它们允许您在代码中引入只有在运行时才能看到的错误。我说的是成功转换为表达式树的c#代码,但不被应该将其转换为SQL的提供程序理解。

的例子:

var a = new SpecialObject();
yourRepository.FindBy(x => a.IsCorrect(x));

对于普通的查询对象,这样的错误是不可能的。

最新更新