我正在开发一个应用程序,其中有不同的存储库用于不同的实体,现在我必须放置搜索逻辑,因此我很困惑我应该在哪里放置我的搜索逻辑,如果我创建一个新的搜索存储库或者我应该放现有存储库中的逻辑,如果我应该在一个现有的存储库中放入哪一个。
下面列出了存储库
public class VendorRepository
{
}
public class ProductRepository
{
}
Public Class ProductBatchRepository
{
}
答案 0 :(得分:2)
我喜欢使用的替代方法......
......你可以seperate commands from queries。您的命令将使用底层域模型和存储库(就像您现在拥有的那样?);而您的查询可以使用其他技术;例如;首先使用实体框架代码直接查询数据库。
通过这种方式,您可以灵活地查询(使用LINQ)并绕过不会为查询目的增加价值的图层,并专门为您的客户设计返回类型。您甚至可以使用数据库视图,这样可以更容易查询。
答案 1 :(得分: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>
{
}
答案 2 :(得分:1)
我会创建搜索相应存储库中每个实体的方法,并创建另一个类,调用所有这些类来搜索所有内容并将结果转换为所需的形状......
答案 3 :(得分:1)
当您只想搜索可以执行ProductRepository.Search(....的产品时,您应该以这种方式在每个存储库中创建搜索方法 这也将允许您优化每个存储库的搜索方法,这将比一次大规模搜索更快。
答案 4 :(得分:1)
我不是100%肯定我理解你的问题,但是如果你的意思是你有不同数据库的连接并希望实现搜索逻辑,那么我倾向于创建一个专门处理搜索的类 - 将此功能与您的数据总是倾向于良好的ide,因为这意味着逻辑将与您可能做的任何更改完全分开,从而在您意外删除存储库时免于删除。
答案 5 :(得分:1)
如果它是您正在撰写的网络应用,为什么不简单地实施谷歌的锚标记链接?这将使您免于必须自己编写代码。
答案 6 :(得分:0)
那么感谢每一位参与讨论的人,我已经对此进行了大量搜索,最后我决定将逻辑放在不同的存储库中,因为这不符合最佳实践,但这是最好的解决方案在我的问题。