【问题标题】:Should I use the Command pattern instead of a call to a static method?我应该使用命令模式而不是调用静态方法吗?
【发布时间】:2014-01-06 02:22:56
【问题描述】:

带着学习命令模式的希望,我用 C# 建立了一个带有两个按钮的简单 GUI 应用程序。第一个按钮使用(我的尝试)命令模式来执行操作,而第二个按钮只是调用另一个类中的静态方法。

这是表单代码

    private void CommandButton_Click(object sender, EventArgs e)
    {
        ICommand command = new ConcreteCommand();
        command.Execute(); //Performs the same code as DoOperation()
    }

    private void StaticButton_Click(object sender, EventArgs e)
    {
        Helper.DoOperation(); //Performs the same code as Execute()
    }

我的问题是:

  1. 在这种情况下实施命令模式是否合适?
  2. 在这种特定情况下,与静态方法调用相比,使用命令模式有哪些优点/缺点?在其他“现实世界”场景中?
  3. 如果我的 GUI 设计在未来发生变化,如果我使用静态函数调用而不是命令模式,这是否会变得更加困难,或者意味着对现有代码的更多更改?

【问题讨论】:

    标签: c# oop design-patterns user-interface command-pattern


    【解决方案1】:

    命令模式用于根据命令参数中的值执行一组操作,而在您显示的代码中,不依赖于当前状态。在你的情况下,我的静态方法会很好。

    但情况并非总是如此,因此请仔细研究您的需求,然后选择继续进行的方式,我会选择命令模式,因为这为未来的需求变化提供了更大的灵活性。

    【讨论】:

    • 需要什么状态?这会阻止我使用命令模式吗?如果我误解了,请原谅我,但是您似乎在第一段中建议静态方法是可以的,但是在第二段中您说您会选择命令模式。你能澄清一下你为什么要这样做吗?
    • 他的主要观点是,在您当前的(简单)实现中,静态方法是一个很好的解决方案,而命令会增加一些不必要的复杂性。但是,如果您有更复杂的模型/视图模型或依赖项要添加到您的方法中,则必须使用命令模式。
    【解决方案2】:

    在您的情况下使用命令模式并没有真正的优势。此外,您的实现不正确。使用命令模式,创建命令的人不同于执行命令的人。这种差异使您可以做一些有趣的事情,例如让其他人能够执行命令。

    例如,命令是 WPF 的自然组成部分。在那里,您可以将命令对象数据绑定到按钮,并将实际执行留给按钮。不需要事件之类的。与您的情况不同,您必须使用事件(假设您使用的是 WinForms)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-23
      • 2012-06-17
      • 1970-01-01
      • 2013-11-10
      • 2014-05-24
      • 1970-01-01
      • 2015-11-25
      • 1970-01-01
      相关资源
      最近更新 更多