8

我正在开发一个应用程序,其中针对不同的实体有不同的存储库,现在我必须放置搜索逻辑,因此我很困惑我应该将搜索逻辑放在哪里,我应该创建一个新的搜索存储库还是应该将逻辑放入现有的存储库,如果我应该放入一些现有的存​​储库,它是哪一个。

下面列出了存储库

public class VendorRepository
{

}

public class ProductRepository
{

}

Public Class ProductBatchRepository
{

}
4

7 回答 7

2

我喜欢使用的替代方法...

...您可以将命令与查询分开。您的命令将使用底层域模型和存储库(就像您现在拥有的那样?);而您的查询可以使用另一种技术;例如; 首先使用实体​​框架代码直接查询数据库。

这样,您就可以灵活地进行查询(使用 LINQ)和绕过不会为查询目的增加价值的层,并专门为您的客户设计返回类型。如果这样更容易查询,您甚至可以使用数据库视图。

于 2013-06-04T11:14:10.740 回答
2

为什么不是基础存储库?像这样的东西:

public class GenericRepository<T>
{
    protected IDbSet<T> Query<T>()
    {
        return myContext.GetDbSet<T>();
    }

    public IEnumerable<T> Where<T>(Expression<Func<T, bool>> predicate)
    {
        return Query<T>().Where(predicate).ToList();
    }

   ...
}

然后是存储库:

public class ProductRepository : GenericRepository<Product>
{

}

public class VendorRepository : GenericRepository<Vendor>
{

}
于 2013-06-04T11:34:06.217 回答
1

我将创建用于搜索相应存储库中每个实体的方法,并创建另一个类,该类将调用所有这些来搜索所有内容并将结果转换为所需的形状......

于 2013-06-04T10:46:39.923 回答
1

当您只想搜索可以执行的产品时,您应该以这种方式在每个存储库中创建搜索方法 ProductRepository.Search(.... 这还将允许您优化每个存储库的搜索方法,这将比一次大规模搜索更快。

于 2013-06-04T10:46:44.740 回答
1

我不是 100% 确定我理解您的问题,但如果您的意思是您与不同的数据库有连接并且想要实现搜索逻辑,那么我倾向于创建一个专门处理搜索的类 - 始终将此功能与您的数据分开往往是个好主意,因为这意味着逻辑将与您可能进行的任何更改完全分开,因此如果您不小心删除了存储库,则不会被删除。

于 2013-06-04T10:46:50.960 回答
1

如果它是您正在编写的网络应用程序,为什么不简单地实现一个指向谷歌的锚标记链接呢?这将使您不必自己编写代码。

于 2013-06-04T10:47:05.283 回答
0

好吧,感谢大家参与讨论,我对此进行了很多搜索,最后我决定将逻辑放在不同的存储库中,因为这不遵循最佳实践,但这是我问题的最佳解决方案.

于 2013-06-04T11:18:51.643 回答