0

我正在使用 MVC 3 和 Entity Framework 4.1 开发一个站点。我是使用实体框架进行 MVC 3 开发的新手,因此希望在一些设计决策方面有所帮助。我的网站只有大约 15 个用户可以访问的页面。而不是每个页面都有控制器 - 我将只有一个控制器类 - (但每个页面都有模型)。在控制器类中,我会将每个页面的方法保存在区域中,以便它们易于扩展。因此,例如,我将在具有 RedirectToAction 主页的 SiteController 中有一个 LogOn 方法 - 而 Hompage() 方法将存在于主页区域的我的 SiteController 中。

我已经有一个同事设计的数据库(数据库中有大约 12 个左右的表)-我一直在研究 Entity Framework 如何从中创建代码-但是建议将此代码保存在 DAL 文件夹中吗?每个页面还有我自己的模型吗?例如 - 我有一个将保存在数据库中的文件名。在我的主页上,我想显示 FileName - 在我的主页模型上有一个字符串 FileName,然后在 HomePage() 视图方法中,model.FileName 是从 db.context 设置的(从 db 获取文件名)。

那么最好在我的 SiteController 的实例化点实例化所有数据库上下文,还是只在需要它们的方法中实例化它们?即 - 如果主页视图需要表 1 和表 2,那么在 Hompage() 方法中新建它们,如果另一个视图方法需要来自表 3/4 的数据或必须将数据保存到表 3/4,那么在该方法开始时新建它们?

4

2 回答 2

1

你写的第一个观察:

而不是每个页面都有控制器 - 我打算只有一个控制器类

我完全不同意这一点。出于多种原因。

谷歌一点关于以下主题:

  • SRP(单一职责原则)又名 SoC(关注点分离)
  • IoC(控制反转)
  • Spot(单点真理)
  • LSP(里氏替换原则)
  • OCP - 开闭原则
于 2012-12-13T09:01:44.847 回答
1
  1. 使用 EF Power 工具对数据库进行逆向工程,这将创建文件夹结构。
  2. 每页保留一个控制器。除非这些页面是真正属于同一过程的向导类型数据输入方案的一部分,否则将它们分成多个控制器。
  3. 右键单击,添加新控制器 - 使用内置脚手架使用实体框架上下文生成控制器(确保在上述步骤 1 之后构建应用程序,在“添加控制器”对话框中选择上下文类)。它将为您生成视图和控制器。对您要为其输入数据的每个项目重复此操作。
  4. 您的上下文将被实例化为已经为您创建的控制器的一部分 - 您不需要做任何其他事情(包括处置 - 生成的代码也会为您处置它,因为控制器已处置)
于 2012-12-13T16:00:58.327 回答