GRASP的控制器和MVC的控制器问题

dev*_*ium 7 c# java oop model-view-controller controller

问题简介

我通过Craig Larman的应用UML和模式:面向对象分析和设计和迭代开发的介绍,在UP(统一过程)之后接受了有关OO分析和设计的教学.

在使用它时,我们通常会绘制一个Domain Model并从中进行交互/关联图,我们得到了Class Diagrams.然后我们通常Controllers会将它作为我们Model与"外部世界" 之间的"门"(遵循GRASP模式).所有世界上任何一种逻辑的访问都必须通过Controllers.我会打电话给那些人Controllers Model's Controllers,所以稍后当我们谈论MVC's Controllers我们可以区分它们时.这可以在下面最令人敬畏的图表中描述:

alt text http://dl.dropbox.com/u/6187267/pic1.jpg

在黑色中我们有我们Model的对象和类的关联.红色我们有Model Controllers,使用来自的数据Model.

基本上,下面的这种设计,你只能用工作Model通过所谓的Model's Controllers(我们通常有一个ControllerUse Case!).

现在问题本身

在了解MVC时,我总是有一个问题,无论MVC's Controller事实Model's Controller与否?他们是相同的概念吗?我认为它们是不同的概念,因为Model Controllers我们以前做过的事情除了我们的课程之外什么都不知道Model,而这似乎不会发生在我们身上MVC's Controllers.

如果我说的是真的,下面的图表应该是有意义的:

alt text http://dl.dropbox.com/u/6187267/mvc_.png

我对吗?

Sha*_*thy 4

我想我明白你在说什么:)

您所调用的Model Controllers称为存储库。这是一个定义您与底层模型的特定交互的接口。例如,如果您有一个代表员工的类,并且您想做三件事:

  • List<Employee> List()
  • Add(int employeeID)
  • Delete(int employeeID)

然后您将定义一个名为以下内​​容的接口:

public interface IEmployeeRepository
{
    List<Employee> List();
    void Add(int employeeID);
    void Delete(int employeeID);
}
Run Code Online (Sandbox Code Playgroud)

您将确保所有代码都处理接口,而不是直接处理对象 - 存储库模式。这就是您所说的Model Controller. 有关更多详细信息,请参阅http://www.dev102.com/2008/12/08/working-with-aspnet-mvc-part-2-the-model-and-the-repository-pattern/,或搜索存储库模式。

MVC 世界中的控制器实际上是决定程序流程逻辑的东西。例如,假设您有一个员工列表的视图。当用户点击此视图上的“删除”按钮时,控制器将加载适当的存储库并调用其上的删除方法。

tl;dr: MVC 控制器 = 当用户执行此操作时,在程序中执行此操作(程序逻辑);存储库(模型控制器)= 定义模型中的对象支持哪些交互

是的,你是对的:)