none
WinForm 程序采用什么设计模式比较好 RRS feed

  • 常规讨论

  • 在写一个基于WinForm的和硬件通讯的上位机程序.

    主窗口上有一些按钮, textbox, label, 以及菜单.

    感觉这天然就是一个命令模式的情景. 不知道还有其他模式比较适合吗?

     

    2012年7月13日 15:57

全部回复

  • 还有个疑问,因为Winform的主窗口中的控件,都是在主窗口类的私有成员变量。

    例如一个Textbox1控件,我需要把用户在这个控件的输入值传递到一个命令模式下的receiver. 

    我的做法是: 

    Class MainForm

    {     private FileInvoker _invoker;

            private ICommand _concreteCmd1;
            private ICommand _concreteCmd2;
            private IReceiver  _Receiver;

             private void Button1_Click(object sender, EventArgs e)
            {
                _invoker.setCommand(_concreteCmd , TextBox1.Text);  //此处把控件TextBox1的值传递给Invoker, 
                _invoker.notify();
            }

    }

    public class Invoker
        {
            private ICommand _fCmd;
            private Object _msg;

            public void setFileCommand(IFileCommand cmd, Object msg)
            {
                this._fileCmd = cmd;
                this._msg = msg;
            }

            public void notify()
            {
                this._fCmd.execute(_msg);
            }
        }

    有些疑惑,这样把用户(Mainform)的私有成员变量的值传递给Invoker,实际上也传递给了Icommand接口。

    这样做合适吗? 第一次写C#程序,看了《设计模式之禅》 《大话设计模式》 《深入浅出(head first)设计模式中文版》, 不知道这样传递一个

    Object参数,有没有违反OOD的几个基本原则呢?自己分析不出来,特此求教。

    而且,假设我在Receiver中处理完毕,需要把值返回给用户(Mainform)显示,直接通过invoker返回吗? 

    我的类图类似:

    mainform --- > invoker <>- -- > ICommand 

           |      |                                   ^

           |      |                                    |

           |      |-------------------->         |

           --->  Receiver  <----  concrete command

    2012年7月14日 1:11
  • Hi focusdoit,

      23种常用设计模式只是一种实际应用中的思想提炼出来,不必要死套模式。


    Jason Wang [MSFT]
    MSDN Community Support | Feedback to us

    2012年7月18日 2:01
    版主
  • 谢谢, 不过我是初学者,在学OOP的设计原则和设计模式.

    不想按照以前写C语言的思维来写C#的程序.虽然这个上位机的项目功能实现起来,对我来说, 可能按照C的思维还要快一些.

    2012年7月18日 21:12