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

Repository Service layer Search Method best practice.

存储层

    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();

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

最佳做法是不要在您的存储库中使用动态搜索功能。所有类型的实现都是有漏洞的抽象。如果您允许对所有内容进行搜索,也很难正确地为表格编制索引。

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

或者做一个适当的设计,让您知道系统真正应该支持什么样的搜索。

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