首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用存储库模式的MVC搜索功能

问使用存储库模式的MVC搜索功能
EN

Stack Overflow用户
提问于 2014-07-20 14:07:48
回答 2查看 1.5K关注 0票数 2

我试图使用存储库模式、域模型和服务层将一个简单的搜索功能构建到应用程序中。

我到处搜索,没有发现任何符合存储库模式的东西。我对Specification进行了快速阅读,但这看起来不符合我的要求。请继续读。

一个典型的搜索包括:找到一个上大学的学生,学习abc,讲英语,和.所以,我基本上是在敲每一张桌子。

我有以下几层:

服务层

AppStudentService,AppCollegeService,。

业务逻辑层(BLL),包含以下域模型:

学生,学院,学科,语言,SearchService .

数据访问层(DAL),包含以下存储库:

StudentRepository,CollegeRepository,SubjectRepository,LanguageRepository

为了解决这个问题,我在服务层构建了一个AppSearchService。这将在BLL中实例化SearchService,在DAL中实例化所有所需的存储库。

在BLL中,我构建了一个包含搜索逻辑的SearchService,并在每个存储库上调用一个SubSearch()方法来获取它所在区域的数据,例如StudentRepository.SubSearch返回学生的详细信息。业务逻辑将将所有子搜索结果绑定在一起,以便返回最终的搜索结果。

我决定将搜索分解为多个小查询,即SubSearch方法,而不是包含许多联接的大规模搜索查询。使用实体框架。

问题1.

每个存储库都有它的标准方法,例如Add、Save、Remove、FindAll、FindBy和SubSearch方法。在这里添加我的自定义(非回购)方法是个好主意,还是它污染了存储库的设计?

问题2.

是否更好地将所有SubSearch方法和搜索逻辑放在DAL中的一个新的搜索类(和方法)中?这样,所有的逻辑都在一起,不需要实例化所有BLL对象和Repo对象,即更好的性能。

问题3.

对于存储库模式,我所做的是一个很好的方法吗?如果没有人能为我指明正确的方向,谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-20 20:26:46

您最好创建一个SearchRepository,用于跨数据层进行搜索。这将是最有效的,因为将多个存储库的结果连接在一起将是丑陋的,最好是低效的。最坏的恶梦。

如果没有必要的话,您不希望执行多个搜索查询。您应该将查询作为一个单元执行。这是最有效的。

票数 1
EN

Stack Overflow用户

发布于 2014-07-20 20:02:17

说到,问题一,和问题三,。这是我的存储库:

代码语言:javascript
复制
public interface IRepository<T>
{
    IQueryable<T> List();
    bool Create(T item);
    bool Delete(int id);
    T Get(int id);
}

这就是全部。存储库用于基本访问,仅用于覆盖不同数据库访问库中这些函数的实现。它是具有泛型实现的泛型类。

关于问题二,。我不知道您的意思是什么,但是我会用方法IStudentSearchService创建Search,这是一个条件对象。它将使用存储库(在构造函数中注入)。您只注入搜索功能使用的存储库。甚至不管您注入了多少存储库,创建存储库的成本都应该很高,而且不应该进行数据库操作。此服务可以有许多私有方法来准备用于搜索的其他数据。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24851276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档