我正在开发一个应用程序,其中针对不同的实体有不同的存储库,现在我必须放置搜索逻辑,因此我很困惑我应该将搜索逻辑放在哪里,我应该创建一个新的搜索存储库还是应该将逻辑放入现有的存储库,如果我应该放入一些现有的存储库,它是哪一个。
下面列出了存储库
public class VendorRepository
{
}
public class ProductRepository
{
}
Public Class ProductBatchRepository
{
}
我正在开发一个应用程序,其中针对不同的实体有不同的存储库,现在我必须放置搜索逻辑,因此我很困惑我应该将搜索逻辑放在哪里,我应该创建一个新的搜索存储库还是应该将逻辑放入现有的存储库,如果我应该放入一些现有的存储库,它是哪一个。
下面列出了存储库
public class VendorRepository
{
}
public class ProductRepository
{
}
Public Class ProductBatchRepository
{
}
我喜欢使用的替代方法...
...您可以将命令与查询分开。您的命令将使用底层域模型和存储库(就像您现在拥有的那样?);而您的查询可以使用另一种技术;例如; 首先使用实体框架代码直接查询数据库。
这样,您就可以灵活地进行查询(使用 LINQ)和绕过不会为查询目的增加价值的层,并专门为您的客户设计返回类型。如果这样更容易查询,您甚至可以使用数据库视图。
为什么不是基础存储库?像这样的东西:
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>
{
}
我将创建用于搜索相应存储库中每个实体的方法,并创建另一个类,该类将调用所有这些来搜索所有内容并将结果转换为所需的形状......
当您只想搜索可以执行的产品时,您应该以这种方式在每个存储库中创建搜索方法 ProductRepository.Search(.... 这还将允许您优化每个存储库的搜索方法,这将比一次大规模搜索更快。
我不是 100% 确定我理解您的问题,但如果您的意思是您与不同的数据库有连接并且想要实现搜索逻辑,那么我倾向于创建一个专门处理搜索的类 - 始终将此功能与您的数据分开往往是个好主意,因为这意味着逻辑将与您可能进行的任何更改完全分开,因此如果您不小心删除了存储库,则不会被删除。
如果它是您正在编写的网络应用程序,为什么不简单地实现一个指向谷歌的锚标记链接呢?这将使您不必自己编写代码。
好吧,感谢大家参与讨论,我对此进行了很多搜索,最后我决定将逻辑放在不同的存储库中,因为这不遵循最佳实践,但这是我问题的最佳解决方案.