Grasp的控制器模式背后的思想是什么?
我现在的解释是,有时你想要实现一些需要使用几个类的东西,但是这些类中没有一个可以或没有访问到完成这项工作所需的信息,所以你创建了一个新的类来完成这项工作,具有对所有需要的类的引用(这可能是信息专家)。
这是对Grasp的控制器的正确看法吗?
一般来说,当我在谷歌上搜索控制器时,我只能得到关于MVC的(以及其他什么)的结果,这是我不理解的主题,所以我希望得到的答案不要假设我知道ASP.NET的MVC或其他东西:(
谢谢
发布于 2010-06-03 06:04:08
根据Wikipedia的说法
控制器对象是负责接收或处理系统事件的非用户界面对象。
在UI层之外的第一个对象首先接收和协调(“控制”)系统操作?
所有的控制器--无论是MVC、GRASP还是Patterns of EAA --都是关于接收输入和响应事件的。
我从字面上把它概念化:想一想视频游戏控制器。

它响应输入事件--用户按下按钮。它不一定知道当你点击按钮时该做什么,但它至少会接收事件。
查看控制器,可以很容易地弄清楚系统事件是什么-也就是说,它响应什么输入以及用户如何与系统交互。在任天堂控制器上,很明显系统事件是:
A
B
X
Y
↑
↓
→
←
L
R
如果我们要处理所有这些事件并构建一个软件控制器来处理它们,那么它将是一个MVC控制器:这些事件都与呈现给用户的物理控制器有关-如果你愿意的话,它是“视图”。但是对于大多数视频游戏来说,还有第二层输入事件,按钮混搭映射到特定的系统操作。举个例子,如果你在“凡人格斗2”中扮演天蝎座,按下← ← B就会触发你的一个特殊动作。在这种情况下,系统可能需要不同的控制器来处理这些不同类型的事件:

在这里,NES Button Controller是一个MVC控制器,它可以跟踪UI元素的状态-例如,记住按什么顺序按下了哪些按钮。取决于应用程序状态(请参阅Application Controller -另一个!)NES Button Controller将通过调用其他控制器(例如Scorpion Controller )上的方法来响应某些按钮组合,这些控制器是用例控制器。
重要的是,通过查看这些控制器对象的设计,您可以快速轻松地枚举它们响应的系统事件。
总之,MVC控制器仍然是一种抓取控制器-因为它的方法倾向于表示系统事件,这些事件响应用户输入。但还有其他不是MVC控制器的GRASP控制器:用例控制器。GRASP用例控制器可以响应诸如“用户创建新的销售”之类的系统事件,而MVC控制器可以响应诸如"system receives a PUT request for /sales/new“或"a java.awt.event.ActionEvent fires`”之类的事件。
发布于 2010-06-03 06:04:50
模型包含数据。视图显示数据。
视图使用Gang of Four监听器模式监听模型。
控制器决定如何处理用户输入。它们可以调用模型上的方法、在当前模型集中构造新对象、从当前模型集中删除对象、将视图重新连接到不同的模型、添加视图、删除视图或重新配置视图。
GRASP只是一个更好地理解软件的工具,并希望通过良好的设计实践防止人们在创建新软件时犯下明显的错误。它与MVC没有任何关系,但可以用来更好地理解MVC。
MVC中的关键是模型不会被处理显示细节的代码污染。这样,您就可以单独在模型中隔离“业务逻辑”或“类应该做什么”。视图对模型中的更改做出反应,因为模型会向根据模型(侦听器模式)注册了自身的每个视图发出消息。消息通常非常简洁,基本上不需要包含除“模型已更改”之外的任何数据。
当视图收到模型中发生更改的通知时,视图将从模型的公共接口获取必要的数据。一旦视图有了所需的数据,它就会向用户显示数据(使用视图应该支持的任何界面)。这隔离了将数据呈现给一个类,当视图不兼容地改变时,这个类将中断,并且允许修改视图代码,而不需要模型类需要“兼容性”修改。
控制器负责知道焦点所在,以及更新哪个模型或视图。它是将事物组合在一起的粘合剂,并负责正确处理输入。
https://stackoverflow.com/questions/2961876
复制相似问题