我认为存储库应该只执行CRUD操作而不是附加查询,否则你最终会在存储库中使用这些方法。
所以我的问题是,在哪里(在什么层)查询检索实体?
答案 0 :(得分:3)
可以编写具有默认CRUD操作的存储库。例如:
public interface IRepository<TEntity>
{
TEntity FindByIdentity(object identity);
TEntity FindBy(Expression<Func<TEntity, bool>> specification);
IList<TEntity> FindAll();
IList<TEntity> FindAllBy(Expression<Func<TEntity, bool>> specification);
TEntity Save(TEntity saveable);
void Delete(TEntity deletable);
}
表达式&GT;基本上是规范,查询可以这种方式封装。如果我们有那种 Repository ,那么我们就不需要编写许多特定的存储库。
替代路径是创建查询对象。我们可以将该查询的接口添加到Core / Busines Logic层,并将实现添加到Services / Data层。这样我们就可以很好地命名像 AllPreferredCustomersQuery 这样的查询。它与规范非常相似,但规范不使用基础架构,因此我们可能会将其添加到Core / Business Logic层。 查询对象更具可配置性(例如可以添加限制,获取策略,连接等)。