GRASP的控制器究竟是什么?

dev*_*ium 4 c# java design-patterns controller grasp

Grasp的Controller模式背后的想法是什么?

我目前的解释是,有时你想要实现需要使用几个类的东西,但这些类中没有一个可以或者有权访问所需的信息,所以你创建了一个新的类来完成这项工作,所有需要的课程(这可能是信息专家).

这是Grasp控制器的正确视图吗?

通常在google搜索或SO'ing控制器时,我只得到关于MVC(以及诸如此类)的结果,这些是我不了解的主题,所以我想要的答案不要假设我知道ASP.NET的MVC或其他: (

谢谢

Ric*_*uen 7

根据维基百科:

Controller对象是负责接收或处理系统事件的非用户界面对象.

应用UML和模式:

UI层之外的第一个对象首先接收并协调("控制")系统操作?

控制器,无论是MVC还是GRASP还是EAA模式,都是关于接收输入和响应事件的.

我非常直观地概念化它:想想一个视频游戏控制器.NES控制器

它响应输入事件 - 用户按下按钮.当你按下按钮时它不一定知道该怎么做,但它至少会收到这个事件.

查看控制器,可以轻松找出系统事件是什么 - 也就是说它响应的输入以及用户如何与系统交互.在任天堂控制器上,很明显系统事件是:

  • A
  • B
  • X
  • Y
  • ?
  • ?
  • ?
  • ?
  • L
  • R

如果我们要采取所有这些事件并构建一个软件控制器来处理它们,它将是一个MVC控制器:这些事件都与呈现给用户的物理控制器有关 - 如果你愿意,它就是"视图".但是大多数视频游戏都有第二层输入事件,其中按钮糖化映射到特定的系统操作.例如,如果你在真人快打2中扮演蝎子,按下? ? B会触发你的一个特殊动作.在这种情况下,系统可能需要不同的控制器来处理这些不同类型的事件:

各种控制器类的UML图 - 按钮控制器,每个按钮按下方法,然后是不同可播放字符的各种控制器对象. 每个玩家控制器都会公开与角色的特殊动作相对应的方法.

这里NES Button Controller是一个MVC控制器,它将跟踪UI元素的状态 - 例如,记住按什么顺序按下哪些按钮.根据应用程序状态(请参阅应用程序控制器 - 另一个!),NES Button Controller可以通过调用其他控制器上的方法(例如Scorpion Controller- 用例控制器)来响应某些按钮组合.

重要的是,通过查看这些控制器对象的设计,您可以快速轻松地枚举它们响应的系统事件.

总而言之,MVC控制器最终仍然是一种GRASP控制器 - 因为它的方法往往代表响应用户输入的系统事件.但是还有其他GRASP控制器不是MVC控制器:用例控制器.GRASP用例控制器可以响应系统事件,例如"用户创建新的销售",而MVC控制器将响应诸如"系统接收PUT请求/sales/new"或" java.awt.event.ActionEvent火灾"之类的事件.