我已经通过Craig Larman的Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development了解了OO分析和设计,它遵循UP(统一过程)。
使用它时,我们通常会绘制一个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
(我们通常每Controller
有一个Use Case
!)。
在了解MVC时,我总是有MVC's Controller
实际上是Model's Controller
的问题?他们是相同的概念吗?我认为它们是不同的概念,因为我们过去所做的Model Controllers
除了我们Model
上的类之外什么都不知道,这不是MVC's Controllers
中似乎发生的事情。
如果我说的是真的,下面的图表应该是有道理的:
alt text http://dl.dropbox.com/u/6187267/mvc_.png
我是对的吗?
答案 0 :(得分:4)
我想我明白你在说什么:)
您呼叫的内容Model Controllers
称为存储库。这是一个界面,用于定义与底层模型的特定交互。例如,如果您有一个代表Employees的类,并且您想要做三件事:
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世界中的控制器实际上是指示程序流逻辑的东西。例如,假设您查看了员工列表。当用户点击此视图上的“删除”按钮时,控制器将加载相应的存储库并在其上调用Delete方法。
tl; dr:MVC Controller =当用户这样做时,在程序中执行此操作(程序逻辑);存储库(模型控制器)=定义模型中对象支持的交互
是的,你是对的:)。