存储库服务层搜索方法最佳实践。

时间:2016-03-11 16:12:35

标签: c# architecture

存储库层

    public async Task<IEnumerable<AbstractDataType>> Search()
    {
        var items = context.Table.ToList().Select(x => x.ToDomain());
        return items;
    }

服务层

    var search = await eProfileRepository.Search();            
    var item = search.Where(x => x.Id == id).FirstOrDefault();

我的问题是这个。我想要一个动态搜索方法,我可以在我的服务层中使用它来搜索表。以上是否可以在应用where子句之前从数据库中获取所有记录?我必须这样做的原因是因为我有这个转换实体类型的扩展方法 - &gt;域类型。如果我执行IQueryable返回并且我没有执行.ToList()我得到一个异常,抱怨扩展方法无法确定类型或类似的东西。有人知道这段代码的负面影响吗?感谢。

1 个答案:

答案 0 :(得分:0)

最佳做法是在您的存储库中没有动态搜索功能。所有类型的实现都将是漏洞抽象。如果允许搜索所有内容,那么正确索引表也很困难。

您可以使用规范模式来获得更加动态的性质,但仍然可以控制可以搜索的内容。

或者做一个合适的设计,让您了解系统应该支持哪种搜索。

存储库中显式查找方法的好处在于您可以完全控制系统应该支持的内容。您还可以更改返回的结果集。广泛搜索通常返回每个对象的属性少于窄搜索。