【问题标题】:Is it bad practice to handle multiple event types of the same action?处理同一操作的多个事件类型是不好的做法吗?
【发布时间】:2014-12-26 01:25:16
【问题描述】:

我的问题:

我有.Enter.TextChanged 事件,它们都触发完全相同的代码。我已将这些事件组合在一个处理程序下。出于某种原因,这是否被认为是不好的做法,或者在这种特定情况下,简化我的代码是否明智?

示例代码:

合并在一个处理程序下:

Private Sub TextBox_EnterChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.Enter, TextBox2.Enter, TextBox1.TextChanged, TextBox2.TextChanged
    'Some action.
End Sub

默认单独的处理程序:

Private Sub TextBox_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.Enter, TextBox2.Enter
    'Some action.
End Sub


Private Sub TextBox_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged, TextBox2.TextChanged
    'The same action.
End Sub

【问题讨论】:

  • TextBox_EnterChanged 不是事件
  • @NeethuSoman 我知道。它是一个事件处理程序,其名称是任意的。向右滚动代码块以查看事件。无论我如何命名事件处理程序,都会处理这些事件。我的理解有误吗?
  • @NeethuSoman,是一个方法的名字,是合法的。
  • 另一种方法是将处理程序分开,但将action 的代码放在它自己的方法中。这样,您只需在一处更改操作。
  • @ChrisDunaway 对于上下文,我的实际代码的操作调用了一个外部方法并传递了一些参数,例如活动文本框和相关属性。该操作大约有 150 行代码。当我可以通过组合我的事件对其进行一次迭代时,将这些行粘贴两次感觉很笨重。我是originally,甚至将所有事件组合到单个处理程序中,并将事件类型作为参数传递给外部单个方法。从那以后,我在这个网站上受到其他成员的教育,这是一种不好的做法,因为它走得太远了。

标签: vb.net winforms visual-studio events event-handling


【解决方案1】:

虽然询问“不良做法”有时会导致主要基于意见的过大争论,但我也会这样做。它是合法的、实用的,而且大部分都很清楚(除非您开始处理大量事件)。我会用另一个问题直接回答你的问题:

相反,将相同的代码复制/粘贴到多个方法中会有什么好处?

所以,不,我不会考虑这种不好的做法。

【讨论】:

  • 感谢您的反馈。我不确定它是否违反了Single Responsibility Principle。您可能对a similar question I posted a few hours ago 的cmets 感兴趣。它关注支持和反对重复相同代码块的论点。
  • 更清楚一点:没有理由拥有完全相同代码的多个副本。如果您有多个需要类似代码的事件,请尝试将相同的部分分解为它们自己的可重用方法,然后在执行更独特的代码之前/之后从事件中调用它们。
  • @ClarusDignus - 我看到的唯一问题是您将来是否需要进行更改。如果代码仍然如此简单,那么如果您以后需要将它们分开可能没什么大不了的,但是代码越复杂,以后更改就越困难。
猜你喜欢
  • 1970-01-01
  • 2018-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多