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