据我所知,Command模式的目标是帮助将UI交互与应用程序逻辑分开.使用正确实现的命令,单击"打印"菜单项可能会产生一系列交互,如下所示:
(button) ---click executes command----> (command) ---calls Print() in app logic ---> (logic)
这鼓励您将UI与应用程序逻辑分开.
我一直在研究WPF命令,在大多数情况下,我看到他们是如何实现这种模式的.但是,我觉得在某种程度上它们使命令模式变得复杂,并设法以不鼓励将UI与应用程序逻辑分离的方式实现它.
例如,考虑这个简单的WPF窗口,它有一个按钮将文本粘贴到文本框中:
这是代码隐藏:
namespace WpfApplication1 { public partial class Window1 : Window { public Window1() { InitializeComponent(); } private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e) { ApplicationCommands.Paste.Execute(null, txtData); } } }
我从命令中获得了什么?在我看来,我可以轻松地将命令绑定事件处理程序中的代码放入按钮的Click
事件中.当然,现在我可以将多个UI元素与粘贴命令相关联,我只需要使用一个事件处理程序,但是如果我想粘贴到几个不同的文本框呢?我必须使事件处理程序逻辑更复杂或编写更多的事件处理程序.所以现在,我觉得我有这个:
(button) ---executes Routed Command---> (Window) ---executes command binding----(command binding) (logic) <---calls application logic--- (event handler) <-----raises event --------------|
我在这里错过了什么?它看起来像是一个额外的间接层.