Grasp 的 Controller 模式背后的想法是什么?
我目前的解释是,有时你想要实现一些需要使用几个类的东西,但这些类中没有一个可以或无法访问完成它所需的信息,所以你创建一个新类来完成这项工作,引用所有需要的类(这可能是信息专家)。
这是对 Grasp Controller 的正确看法吗?
通常在谷歌搜索或 SO'ing Controller 时,我只会得到关于 MVC(以及诸如此类)的结果,这些是我不了解的主题,所以我想要的答案不假设我知道 ASP.NET 的 MVC或者什么:(
谢谢
最佳答案
根据 Wikipedia :
A Controller object is a non-user interface object responsible for receiving or handling a system event.
来自 Applying UML and Patterns :
What first object beyond the UI layer first receives and coordinates ("controls") a system operation?
Controller ,全面 - 无论是 MVC 还是 GRASP 或 Patterns of EAA - 都是关于接收输入和响应事件。
我从字面上将其概念化:想想视频游戏 Controller 。
它响应输入事件——用户按下按钮。当您按下按钮时,它不一定知道要做什么,但它至少会收到事件。
查看 Controller ,可以很容易地弄清楚系统事件是什么 - 也就是说它响应什么输入以及用户如何与系统交互。在任天堂 Controller 上,很明显系统事件是:
- 按
A
- 按
B
- 按
X
- 按
Y
- 按
↑
- 按
↓
- 按
→
- 按
←
- 按
L
- 按
R
如果我们要处理所有这些事件并构建一个软件 Controller 来处理它们,它将是一个 MVC Controller :这些事件都与呈现给用户的物理 Controller 有关 - 它是“ View ”,如果你将要。但是大多数视频游戏都有第二层输入事件,其中按钮混搭映射到特定的系统操作。例如,如果您在 Mortal Kombat 2 中扮演 Scorpion,则按 ← ← B
会触发您的一项特殊 Action 。在这种情况下,系统可能需要不同的 Controller 来处理这些不同类型的事件:
在这里,NES 按钮 Controller
是一个 MVC Controller ,它会跟踪 UI 元素的状态 - 例如,记住按什么顺序按下了哪些按钮。根据应用程序状态(参见 Application Controller - 另一个!)NES Button Controller
将通过调用其他 Controller 上的方法来响应某些按钮组合 - 例如 Scorpion Controller
- 这是用例 Controller 。
重要的是,通过查看这些 Controller 对象的设计,您可以快速轻松地枚举它们响应的系统事件。
总而言之,MVC Controller 最终仍然是一种 GRASP Controller ——因为它的方法倾向于表示响应用户输入的系统事件。但是还有其他不是 MVC Controller 的 GRASP Controller :用例 Controller 。 GRASP 用例 Controller 可能会响应系统事件,例如“用户创建新销售”,而 MVC Controller 会响应“系统接收到 /sales/new
的 PUT 请求”或“a java.awt.event.ActionEvent
触发`"。
关于c# - GRASP 的 Controller 到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2961876/