2013-02-21 51 views
3

我开始怀疑我的初始设计决策,因为我到处都是这样,我在MVC上找到关于将访问层转储到MVC项目中的教程。 (这对一切顺利我已经学会)具有多个存储库的良好MVC设计

UML Diagram of my design

  • BarRepo:处理访问的API。
  • FooRepo:处理访问我的数据库(使用EF)。
  • FooBarHandler:将来自两个仓库的数据连接到控制器的有用数据。
  • 控制器:一个控制器,没什么特别的。

正如您在图片中看到的,我将每个零件分成了自己的项目并试图获得松散耦合。所以我不会将实体框架类从数据库层中发送出去等等。然而,我遇到了一个泡菜。获取的数据量变得非常大,以至于在前端显着,所以我需要引入分页。所以我跟着this tutorial。 我的“问题”是,现在MVC,逻辑和数据库项目都依赖于PagedList,所以事情不再那么整齐有光泽了。

所以我的问题是你会做什么?

+1

大部分情况下,这听起来像是你做对了。我的建议是使用存储过程来帮助加速数据库交互。他们与EF一起工作的乐趣不大,但他们在处理大量数据方面做得更好,并将所述数据修剪至最小数量。 – IyaTaisho 2013-02-21 19:51:09

回答

2

您不需要使用PagedList,因为您可以自己创建分页的项目列表。查看this StackOverflow question,了解如何执行此操作的示例。

总结:

var pageNum = 3; 
var pageSize = 20; 

var pagedItems = data.Skip((pageNum - 1) * pageSize).Take(pageSize).ToList(); 

这样,你将有PagedList没有依赖关系,这将有助于降低设计中的耦合。

+0

这似乎是一个合法的解决方案:) – 2013-02-21 20:26:11