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

问题简介

通过Craig Larman的应用UML和模式:面向对象分析和设计和迭代开发介绍,我学习了面向对象分析和设计,它遵循UP(统一过程)。

在使用它的时候,我们通常会绘制一个Domain Model并且从中进行交互/关联图,我们会看到Class Diagrams 。 我们通常会使Controllers成为我们Model和“外部世界”之间的“大门”(遵循GRASP模式)。 所有的世界访问做任何类型的逻辑必须通过Controllers 。 我将调用这些Controllers Model's Controllers ,所以稍后当我们谈论MVC's Controllers我们可以区分它们。 这可以在以下最令人敬畏的图表中描述:

替代文字http://dl.dropbox.com/u/6187267/pic1.jpg

在黑色中,我们有Model的对象和类的关联。 用红色表示Model Controllers ,它使用Model数据。

基本上,下面的这种设计,可以只与工作Model ,通过所谓的Model's Controllers (我们通常有一个Controller每个Use Case !)。

现在问题本身

在了解MVC时,我总是会问MVC's Controller实际上是Model's Controller吗? 他们是否是相同的概念? 我认为它们是不同的概念,因为我们曾经做过的Model Controllers除了我们Model上的类以外不知道其他任何东西,这不是MVC's Controllers似乎会发生的事情。

如果我说的是真的,下面的图应该是有道理的:

替代文字http://dl.dropbox.com/u/6187267/mvc_.png

我对吗?


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

你所称的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);
    }
    

    你会确保所有的代码处理接口,而不是直接对象 - 存储库模式。 这就是你所说的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 Controller =当用户这样做时,在程序(程序逻辑)中执行此操作; 存储库(模型控制器)=定义模型中的对象支持哪些交互

    是的,你是对的:)

    链接地址: http://www.djcxy.com/p/47063.html

    上一篇: GRASP's Controllers and MVC's Controllers question

    下一篇: Filtering a hierarchical object displayed with nested xaml data templates