要实现应用程序的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));
}
...
}
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();
}
...
}
}
...
}
达到这一点,我有以下几个问题:是否有一个设计模式正式化这个想法?如果有,.NET会以某种方式支持它吗?如果没有,这听起来像是一个好的实现想法吗?谢谢!
答案 0 :(得分:6)
State design pattern描述了如何实现有限状态机。
在UI中控制屏幕有许多略有不同的设计模式,但我认为Application Controller design pattern符合您的要求。
答案 1 :(得分:4)
这是一个好主意!事实上,它之前已经完成了很多,可能是可扩展应用程序开发中使用的最常见的模式(想想像Visual Studio,Eclipse之类的IDE)。
来自MS模式和实践组的一个示例SCSF (which leverages CAB),使用此模式开箱即用,在WinForms和WPF中构建可插入和可扩展的复合应用程序。它使用的实际模式涉及构建称为WorkItems的分层状态机,它控制用例并流经应用程序。在我将它作为我自己的想法实现之前,我会研究一下模式和实践的人是如何做到的。我已经在很多场合使用它,这非常值得。
答案 2 :(得分:1)
在Java世界中,您可以将Struts或JSF应用程序视为FSM(此页面上的此事件/状态将我们带到该页面/状态。
在传统的基于Web的UI中对流进行建模时,我确实发现使用FSM是一种非常有用的分析工具。您可以非常快速地捕获应用程序行为的本质。 page 和 state 之间几乎存在一对一的对应关系。我会有一个状态模型和相关的数据模型。
现在我们有更丰富的UI利用AJAX,应用程序状态和“页面”之间的对应关系不太明显。但是你仍然可以推断应用程序的行为:这里用户正在执行 this ,当他们完成时可以执行操作X或Y,然后他们就可以 。所以状态,事件和转换仍然存在,只是他们的代表性更加“虚拟”。