Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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
Events 将事件处理代码放入自己的方法中是一种好的设计吗?_Events - Fatal编程技术网

Events 将事件处理代码放入自己的方法中是一种好的设计吗?

Events 将事件处理代码放入自己的方法中是一种好的设计吗?,events,Events,在windows窗体上显示一个按钮,单击该按钮时会执行某些操作 引发的单击事件通常绑定到一个方法,例如 受保护的空按钮1\u单击(对象 发送方,事件参数(e){ } 我有时在其他人的代码中看到的是,按钮行为的实现不是放在Button1_Click方法中,而是放在自己的方法中,从这里调用,如下所示: 私有DoStuff(){} 受保护的空按钮1\u单击(对象 发送方,事件参数(e){ 这是DoStuff(); } 虽然我在这里看到了优势(例如,如果这段代码在其他地方内部需要,它可以很容易地使用),

在windows窗体上显示一个按钮,单击该按钮时会执行某些操作

引发的单击事件通常绑定到一个方法,例如

受保护的空按钮1\u单击(对象 发送方,事件参数(e){

}

我有时在其他人的代码中看到的是,按钮行为的实现不是放在Button1_Click方法中,而是放在自己的方法中,从这里调用,如下所示:

私有DoStuff(){}

受保护的空按钮1\u单击(对象 发送方,事件参数(e){ 这是DoStuff(); }

虽然我在这里看到了优势(例如,如果这段代码在其他地方内部需要,它可以很容易地使用),但我想知道,这是否是一个一般的好的设计决策

因此,问题是:
将事件处理代码放入自己的方法中通常是一个好主意吗?如果是的话,这些方法的命名约定被证明是最佳实践吗?

一个好的经验法则是查看该方法是否正在执行某些特定于UI的操作,或者实际执行一般操作。例如,臀部单击方法可以处理单击或提交表单。如果是前一种,可以将其保留在按钮单击处理程序中,但后一种方法应该有自己的方法。我想说的是,请记住。如果出现以下情况,我会将事件处理代码放入一个单独的方法中:

  • 代码可以由多个事件调用,也可以从其他任何地方或其他地方调用
  • 代码实际上与GUI无关,更像是后端工作

所有小的且仅与GUI相关的内容都会进入处理程序,有时甚至是从同一事件调用(只要签名相同)。因此,这更像是,如果是一般动作,则使用单独的方法,如果该方法与实际事件密切相关,则不使用单独的方法。

直接回答是肯定的。最好将任务封装到它自己的方法中,不仅是为了在其他地方重用,而且从OOP的角度来看,这样做是有意义的。在这种特殊情况下,单击按钮开始一个进程调用DoStuff。这个按钮只是在触发这个过程。按钮1\u单击是一项与DoStuff完全不同的任务。然而,DoStuff不仅更具描述性,而且它将您的按钮与正在完成的实际工作分离


一个好的经验法则是看看 该方法正在执行一些UI操作 具体的,或实际实施的 一般行动。例如臀部 click方法可以处理 单击或提交表单。如果是 前一种,可以把它放在 按钮单击处理程序,但后者 应该有自己的方法。我只是 说的是,保持单身 牢记责任原则


我将事件处理代码放入 单独的方法,如果:

  • 该代码将由多个事件或从其他任何地方调用 或

  • 代码实际上与GUI无关,更像是 后端工作

一切都很小 只有 与GUI相关的内容总是进入 处理程序,有时即使它是 从同一事件调用(只要 签名相同)。所以是 更像是,如果需要,请使用单独的方法 是一般性的行动,如果 方法与方法密切相关 实际事件


在本例中,我保留DoStuff()方法,但使用以下内容订阅它:

button1.Click += delegate { DoStuff(); }

诚然,这不会取悦那些在designer中进行所有事件连接的人。。。但我觉得亲自检查比较简单。(我也讨厌自动生成的事件处理程序名称…

是的,我想是主观的,但如果你与任何“确实”使用设计工程师的人合作,他们会期待“标准”命名约定(我看不出有任何问题)。设计器生成的名称的问题在于,它们指示事件的来源,而不是处理程序的作用。这与正常命名相反。(当然,它们包含下划线…)感谢您提及该原则。虽然这是一种非常自然的思考方式,但很高兴知道其他人已经对它考虑了很多,甚至给它起了个名字正如普拉莫德的回答一样,这是一个很好的战略解释。谢谢