(注:我的问题与三个月前提出这个问题的人非常相似,但是没有回答。) 我最近开始使用MVC3 +entity framework,我一直在阅读,最好的做法是使用存储库模式来集中访问DAL。 这也伴随着解释,你想保持DAL独立于领域,特别是视图层。 但在我见过的例子中,知识库是(或似乎是 )简单地返回DAL实体,即在我的情况下,知识库将返回EF实体。 所以我的问题是,如果只返回DAL实体的存储库有什么好处呢? 这是否增加了一层复杂性,不能消除在层之间传递DAL实体的问题? 如果存储库模式创build一个“进入DAL的单一入口点”,这与上下文对象有何不同? 如果存储库提供了检索和保留DAL对象的机制,那么与上下文对象有什么不同呢? 此外,我至less在一个地方读到工作单元模式集中存储库访问,以pipe理数据上下文对象,但我不明白为什么这也很重要。 我98.8%肯定我在这里错过了一些东西,但从我的阅读中我没有看到。 当然,我可能只是没有阅读正确的消息来源:
我总是使用Repository模式,但对于我最近的项目,我想看看能否完善它的使用和“工作单元”的实现。 我开始挖掘越多,就开始问自己这个问题: “我真的需要它吗? 现在,这一切都从Stackoverflow上的一些评论开始,在他的博客上跟踪Ayende Rahien的post,其中有2个具体的, 存储库是最新单 问-ayende生活,而无需储存库,是-他们价值-生活 这可能会被永远讨论,并取决于不同的应用。 我想知道什么, 这种方法是否适合entity framework项目? 使用这种方法是业务逻辑仍然在一个服务层,或扩展方法(如下所述,我知道,扩展方法是使用NHib会话)? 这很容易使用扩展方法完成。 干净,简单,可重复使用。 public static IEnumerable GetAll( this ISession instance, Expression<Func<T, bool>> where) where T : class { return instance.QueryOver().Where(where).List(); } 使用这种方法和Ninject作为DI,我需要使Context成为一个接口,并在我的控制器注入?
在阅读T. Otwell关于Laravel良好devise模式的书后,我在Laravel 4中创build了一个应用程序,结果发现自己为应用程序中的每个表创build了一个存储库。 我结束了以下表结构: 学生:身份证,姓名 课程:id,名字,teacher_id 教师:身份证,姓名 作业:id,name,course_id 分数(作为学生和作业之间的枢纽):student_id,assignment_id,分数 我有存储库类查找,创build,更新和删除所有这些表的方法。 每个存储库都有一个与数据库交互的Eloquent模型。 关系在每个Laravel的文档模型中定义: http ://laravel.com/docs/eloquent#relationships。 创build新课程时,我所做的只是在课程资料库中调用create方法。 那个课程有作业,所以当创build一个时,我也想为每个学生在课程中创build一个分数表的入口。 我通过Assignment Repository来完成。 这意味着分配库与两个Eloquent模型进行通信,使用Assignment和Student模型。 我的问题是:由于这个应用程序的规模可能会增加,更多的关系将被引入,是否是与存储库中的不同Eloquent模型进行通信的良好实践,或者应该使用其他存储库来完成(我的意思是从分配存储库调用其他存储库)还是应该一起在雄辩模型中完成? 另外,将分数表作为作业和学生之间的关键是否是好的做法,还是应该在其他地方做?