【问题标题】:Repository Service layer Search Method best practice.存储库服务层搜索方法最佳实践。
【发布时间】:2016-03-11 16:12:34
【问题描述】:

存储层

    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 子句之前,上面是否会从数据库中获取所有记录?我必须这样做的原因是因为我有这个转换实体类型 -> 域类型的扩展方法。如果我执行 IQueryable 返回并且我不执行 .ToList() 我会收到一个异常,抱怨扩展方法无法确定类型或类似的东西。有人知道这段代码的负面影响吗?谢谢。

【问题讨论】:

    标签: c# architecture


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 这就是我一直在阅读和思考的内容。感谢您的意见。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多