我正在开发课程,系,学生MVC应用程序,作为学习MVC的一部分。
我选择了多层设计,即Web,BLL,DAL。
我的DAL有DbContext和许多存储库。例如。学生,系,课程,搜索,审核......
接下来看看我如何在DAL存储库中共享DbContext让我在设计模式上读了很多,最后我在Generic Repository和Unit of Work(以及快速查看依赖注入)。
我很快发现了Generic Repositoy和UoW的好处。这适用于学生,部门,课程......适合CRUD功能的实体。我还没编码。
但是当使用Generic Repository和UoW进行搜索和审核时,它就不合适了。背景:为什么在搜索和审计之间共享DbContext?我想在同一笔交易中审核每次搜索。
所以我被卡住了!主要是因为搜索功能是只读的,没有提交。其次,搜索和审计实体都是非常不同的 - 彼此不同,而不是类似CRUD。因此,就我所见,通用存储库在这两个实体中效果不佳。
有没有办法在两个非常不同的实体之间共享DbContext,例如搜索和审核?
我能想出的最佳方法是将审计功能放在Search DAL存储库中。我不喜欢混合这两个实体,听起来有些难看,但我想我可以做出异常,因为它是审计功能。
答案 0 :(得分:1)
Generic Repository的缺点是并非所有实体都支持CRUD操作。存储库不必是CRUD。您可以创建特定于实体的存储库,如下所示。
public class Search
{
public Search(DbContext dbContext);
}
public class AuditRepository
{
public AuditRepository(DbContext dbContext);
}
由于以下原因,许多开发人员不喜欢通用(CRUD)存储库:
“不是每个实体都可以删除,不是每个实体都可以添加,不是每个实体都有一个存储库” Source
示例是仅具有GetById
的存储库。禁止创建/更新/删除的要求。
public class UserRepository
{
public User GetById(int id);
{
}
}