Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 什么是把握';什么事?_C#_Java_Design Patterns_Controller_Grasp - Fatal编程技术网

C# 什么是把握';什么事?

C# 什么是把握';什么事?,c#,java,design-patterns,controller,grasp,C#,Java,Design Patterns,Controller,Grasp,Grass控制器模式背后的理念是什么 我目前的解释是,有时候你想要实现一些需要使用几个类的东西,但是这些类中没有一个可以或者没有访问完成这项工作所需的信息,因此你创建了一个新的类来完成这项工作,它引用了所有需要的类(这就是,可能是信息专家) 这是关于Grass控制器的正确观点吗 一般来说,当我在谷歌上搜索控制器时,我只会得到有关MVC(以及其他)的结果,这些都是我不了解的主题,所以我希望得到的答案不会假设我知道ASP.NET的MVC或其他东西:( 感谢根据: 控制器对象是负责接收或处理系统事件的

Grass控制器模式背后的理念是什么

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

这是关于Grass控制器的正确观点吗

一般来说,当我在谷歌上搜索控制器时,我只会得到有关MVC(以及其他)的结果,这些都是我不了解的主题,所以我希望得到的答案不会假设我知道ASP.NET的MVC或其他东西:(

感谢

根据:

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

发件人:

UI层之外的第一个对象首先接收并协调(“控制”)系统操作是什么

控制器,无论是MVC还是GRAP,都是关于接收输入和响应事件的

我从字面上对它进行了概念化:想象一个视频游戏控制器

它响应输入事件——用户按下按钮。当你按下按钮时,它不一定知道该做什么,但它至少接收到事件

看看控制器,我们可以很容易地找出系统事件是什么——也就是说它响应什么输入以及用户如何与系统交互。在任天堂控制器上,很明显系统事件是:

  • A
  • B
  • X
  • Y
  • L
  • R
如果我们要处理所有这些事件并构建一个软件控制器来处理它们,它将是一个MVC控制器:这些事件都与呈现给用户的物理控制器有关——它是“视图”,如果你愿意的话。但是大多数视频游戏都有第二层输入事件,其中按钮混合映射到特定的系统操作。例如,如果你在《红人快拍2》中扮演蝎子,请按
← ← B
触发您的一个特殊动作。在这种情况下,系统可能需要不同的控制器来处理这些不同类型的事件:

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

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


总之,MVC控制器最终还是一种GRAP控制器——因为它的方法倾向于表示系统事件,这些事件响应用户输入。但是还有其他GRAP控制器不是MVC控制器:用例控制器。GRAP用例控制器可能响应系统事件,例如“用户创建新的销售”MVC控制器将响应诸如“系统接收到
/sales/new
的PUT请求”或“a
java.awt.event.ActionEvent
激发”之类的事件。模型包含数据。视图显示数据

视图侦听模型,使用四人组侦听器模式

控制器决定如何处理用户输入。它们可以调用模型上的方法、在当前模型集中构造新对象、从当前模型集中删除对象、将视图重新连接到不同的模型、添加视图、删除视图或重新配置视图

GRASP只是一个更好地理解软件的工具,希望通过良好的设计实践避免在创建新软件时犯明显的错误。它与MVC无关,但可以用来更好地理解MVC

MVC的关键在于,模型不会被处理显示细节的代码所污染。这样,您就可以单独隔离模型内部的“业务逻辑”或“类应该做什么”。视图会对模型中的更改做出反应,因为模型会向每个已针对模型注册的视图发送消息(侦听器模式)。消息通常非常简洁,基本上不需要包含“模型已更改”以外的任何数据

当视图收到模型发生更改的通知时,视图将从模型的公共界面获取必要的数据。一旦视图获得了所需的数据,它将向用户显示数据(使用视图打算支持的任何界面)。这将数据的表示隔离到一个类,当视图不兼容地更改时,该类将中断,并允许修改视图代码,而无需对模型类进行“兼容性”修改


控制器负责知道焦点在哪里,以及更新哪个模型或视图。它是将事物组合在一起的粘合剂,并负责正确处理输入。

因此,根据定义,控制器必须是一个委托类?一个将函数调用等委托给其他执行实际工作的类的类?不完全是;我错了…但我倾向于使用前端控制器,这是我的一点偏见。更重要的是它对输入做出响应。