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 каким-то образом? Если этого не происходит, это звучит как хорошая идея реализации? Спасибо!
Ответы
Ответ 1
Отличная идея! Настолько замечательно, что это было сделано раньше и, вероятно, наиболее распространенный шаблон, используемый в расширяемой разработке приложений (подумайте о IDE, таких как Visual Studio, Eclipse и т.п.).
Один пример, SCSF (который использует CAB), из группы шаблонов и практик MS, использует этот шаблон вне зависимости от того, чтобы создавать подключаемые и расширяемые составные приложения как в WinForms, так и в WPF. Фактический шаблон, который он использует, включает в себя построение иерархических состояний машин под названием WorkItems, которые управляют usecases и протекают через приложение. Я бы посмотрел, как ребята сделали это, прежде чем я реализую его как свое детище. Я использовал его во многих случаях, и это того стоит.
Ответ 2
Шаблон состояния штата описывает, как реализовать конечный конечный автомат.
В пользовательском интерфейсе есть несколько, немного разных шаблонов дизайна, но я думаю, что шаблон дизайна
Ответ 3
В мире Java вы можете придумать приложение Struts или JSF как FSM (это событие на этой странице/состоянии приведет нас к этой странице/состоянию.
При моделировании потоков в традиционном веб-интерфейсе пользователь нашел, что использование FSM является чрезвычайно полезным инструментом анализа. Вы можете очень быстро понять суть поведения приложения. Между страницей и штатом было много взаимно однозначного соответствия. У меня была бы модель состояния и связанные модели данных.
Теперь у нас более богатые пользовательские интерфейсы, использующие AJAX, соответствие между состояниями приложений и "страницами" менее очевидно. Однако вы все же можете рассуждать о поведении приложения: здесь пользователь делает это, когда они закончили, он может предпринять действия X или Y, а затем они могут это сделать. Таким образом, состояния, события и переходы все еще существуют, так как их представление является немного более "виртуальным".