dev*_*ium 4 c# java design-patterns controller grasp
Grasp的Controller模式背后的想法是什么?
我目前的解释是,有时你想要实现需要使用几个类的东西,但这些类中没有一个可以或者有权访问所需的信息,所以你创建了一个新的类来完成这项工作,所有需要的课程(这可能是信息专家).
这是Grasp控制器的正确视图吗?
通常在google搜索或SO'ing控制器时,我只得到关于MVC(以及诸如此类)的结果,这些是我不了解的主题,所以我想要的答案不要假设我知道ASP.NET的MVC或其他: (
谢谢
根据维基百科:
Controller对象是负责接收或处理系统事件的非用户界面对象.
从应用UML和模式:
UI层之外的第一个对象首先接收并协调("控制")系统操作?
控制器,无论是MVC还是GRASP还是EAA模式,都是关于接收输入和响应事件的.
我非常直观地概念化它:想想一个视频游戏控制器.
它响应输入事件 - 用户按下按钮.当你按下按钮时它不一定知道该怎么做,但它至少会收到这个事件.
查看控制器,可以轻松找出系统事件是什么 - 也就是说它响应的输入以及用户如何与系统交互.在任天堂控制器上,很明显系统事件是:
ABXY????LR如果我们要采取所有这些事件并构建一个软件控制器来处理它们,它将是一个MVC控制器:这些事件都与呈现给用户的物理控制器有关 - 如果你愿意,它就是"视图".但是大多数视频游戏都有第二层输入事件,其中按钮糖化映射到特定的系统操作.例如,如果你在真人快打2中扮演蝎子,按下? ? B会触发你的一个特殊动作.在这种情况下,系统可能需要不同的控制器来处理这些不同类型的事件:

这里NES Button Controller是一个MVC控制器,它将跟踪UI元素的状态 - 例如,记住按什么顺序按下哪些按钮.根据应用程序状态(请参阅应用程序控制器 - 另一个!),NES Button Controller可以通过调用其他控制器上的方法(例如Scorpion Controller- 用例控制器)来响应某些按钮组合.
重要的是,通过查看这些控制器对象的设计,您可以快速轻松地枚举它们响应的系统事件.
总而言之,MVC控制器最终仍然是一种GRASP控制器 - 因为它的方法往往代表响应用户输入的系统事件.但是还有其他GRASP控制器不是MVC控制器:用例控制器.GRASP用例控制器可以响应系统事件,例如"用户创建新的销售",而MVC控制器将响应诸如"系统接收PUT请求/sales/new"或" java.awt.event.ActionEvent火灾"之类的事件.