GUI作为有限状态机

yey*_*man 12 .net user-interface design-patterns winforms

为了实现应用程序的GUI,我希望将所有逻辑从一种形式转移到另一种形式.此GUI管理器将表现为有限状态机.虽然我认为我已经在某处看到过这种实现,但我找不到与这种解决方案相匹配的设计模式.

表单将如下所示:

public class Login : Form
{
    ...

    private void EnterButton_Click()
    {
        ...

        string user = loginTextBox.Text;
        string password = passwordTextBox.Text;
        bool isValid = SecurityManager.CheckUserLogin(user,password);

        GUIManager.FormEnd(FormLogin,new LoginData(user, pass, isValid));
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

GUI管理器将执行以下操作:

public class GUIManager
{
    ...

    public void FormEnd(FormType type, FormData data)
    {
        switch (type)
        {
            ...
            case FormLogin:
                LoginData ld = (LoginData)data;
                if (ld.Valid)
                {
                    m_loginForm.Hide();
                    m_mainForm.Show();
                }
            ...
        }
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

达到这一点,我有以下几个问题:是否有一个设计模式正式化这个想法?如果有,.NET会以某种方式支持它吗?如果没有,这听起来像是一个好的实现想法吗?谢谢!

Mar*_*ann 6

国设计模式描述了如何实现一个有限状态机.

在UI中控制屏幕有许多略有不同的设计模式,但我认为应用程序控制器设计模式符合您的要求.


Tra*_*man 5

这是个好主意!太好了,事实上,它以前已经完成了,并且可能是可扩展应用程序开发中最常用的模式(想想像 Visual Studio、Eclipse 之类的 IDE)。

例如,来自 MS 模式和实践组的SCSF(利用 CAB)使用这种开箱即用的模式在 WinForms 和 WPF 中构建可插入和可扩展的复合应用程序。它使用的实际模式涉及构建称为 WorkItems 的分层状态机,用于控制用例和流经应用程序。在我将它作为我自己的创意实施之前,我会研究模式和实践人员是如何做到的。我已经在很多场合使用过它,它非常值得。