事件处理程序依赖于调用顺序
Event handler has dependency on call order
在 WinForm
上有 TreeView
控件。
在 AfterSelect
事件中,私有字段 selectedFolder
已更新。
对于事件 OnKeyDown
对于 Delete
键是实现的事件处理程序,它与 数据访问层 交互:selectedFolder
作为参数传递给方法DeleteFolder
。 TreeView
的 选定节点 也被删除
代码有以下问题:只有在 DeleteFolder
首先调用时它才能正常工作:
DeleteFolder
(selectedFolder
) // selectedFolder OK
#.SelectedNode.Remove
如果我尝试:
#.SelectedNode.Remove
// AfterSelect
被调用。 selectedFolder 现在是父节点
DeleteFolder
(selectedFolder
) // selectedFolder 错误
正如我提到的,这段代码有难闻的气味。不是吗?
我是否应该进行 Pull down
重构以生成 selectedFolder
局部变量。 AfterSelect
事件处理程序 应该 删除 。
- 根据所选节点填充
selectedFolder
本地变量(来自 AfterSelect
事件处理程序的代码)
#.SelectedNode.Remove
DeleteFolder
(selectedFolder
)
在这种情况下,不依赖于 2.
和 3.
的调用顺序。
在 KeyDown
事件处理程序中,您在删除节点时已经访问了 TreeView
,所以是的,我肯定会在执行其他两个操作之前从节点获取文件夹名称,即使调用顺序一开始并不重要。
在 WinForm
上有 TreeView
控件。
在 AfterSelect
事件中,私有字段 selectedFolder
已更新。
对于事件 OnKeyDown
对于 Delete
键是实现的事件处理程序,它与 数据访问层 交互:selectedFolder
作为参数传递给方法DeleteFolder
。 TreeView
的 选定节点 也被删除
代码有以下问题:只有在 DeleteFolder
首先调用时它才能正常工作:
DeleteFolder
(selectedFolder
) // selectedFolder OK#.SelectedNode.Remove
如果我尝试:
#.SelectedNode.Remove
//AfterSelect
被调用。 selectedFolder 现在是父节点DeleteFolder
(selectedFolder
) // selectedFolder 错误
正如我提到的,这段代码有难闻的气味。不是吗?
我是否应该进行 Pull down
重构以生成 selectedFolder
局部变量。 AfterSelect
事件处理程序 应该 删除 。
- 根据所选节点填充
selectedFolder
本地变量(来自AfterSelect
事件处理程序的代码) #.SelectedNode.Remove
DeleteFolder
(selectedFolder
)
在这种情况下,不依赖于 2.
和 3.
的调用顺序。
在 KeyDown
事件处理程序中,您在删除节点时已经访问了 TreeView
,所以是的,我肯定会在执行其他两个操作之前从节点获取文件夹名称,即使调用顺序一开始并不重要。