2009-10-26 32 views
12

Để triển khai GUI của ứng dụng, tôi muốn có tất cả logic để chuyển từ một dạng này sang dạng khác tập trung. Trình quản lý GUI này sẽ hoạt động như một máy trạng thái hữu hạn. Mặc dù tôi nghĩ rằng tôi đã thấy loại triển khai này ở đâu đó, tôi không thể tìm thấy một mẫu thiết kế phù hợp với loại giải pháp này.GUI là một máy trạng thái hữu hạn

Một biểu mẫu sẽ trông như thế này:

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)); 
    } 

    ... 
} 

Và người quản lý GUI sẽ làm điều gì đó như thế này:

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(); 
       } 
      ... 
     } 
    } 

    ... 
} 

Tiếp cận thời điểm này tôi có các câu hỏi sau: là có một mô hình desing rằng chính thức hóa ý tưởng này? Nếu có, .NET có hỗ trợ nó không? Nếu không có, nó có âm thanh như một ý tưởng thực hiện tốt? Cảm ơn!

+0

+1 FSM cho GUI là một ý tưởng rất hay! Có lẽ bạn có thể tạo một DSL dựa trên XML cho mục đích này ... – ATorras

+0

Thực ra đó là một ý tưởng hay, và tôi mệt mỏi vì điều hướng biển infoclutter của Microsoft. Một loạt quảng cáo tiếp thị trên liên kết từ Travis. Nhưng khi tôi đọc chi tiết, tôi không thấy bất kỳ khái niệm tuyệt vời nào. Chỉ là một chiếc xe cũ. Tôi khuyên bạn nên làm theo ý tưởng của bạn và cố gắng giữ cho dữ liệu được điều khiển. Sau khi tất cả đó là cách hầu hết các máy nhà nước trông như thế nào. –

Trả lời

4

Đó là một ý tưởng tuyệt vời! Thật tuyệt vời, trên thực tế, nó đã được thực hiện trước đây và có lẽ là mẫu phổ biến nhất được sử dụng trong phát triển ứng dụng mở rộng (nghĩ về các IDE như Visual Studio, Eclipse và các loại tương tự).

Một ví dụ, SCSF (which leverages CAB), từ Patterns MS và Practices Group, sử dụng mô hình này out-of-the-box để xây dựng các ứng dụng tổng hợp cắm và mở rộng trong cả hai WinForms và WPF. Mô hình thực tế mà nó sử dụng liên quan đến việc xây dựng các máy trạng thái phân cấp được gọi là WorkItems điều khiển các giai đoạn và lưu thông qua ứng dụng. Tôi sẽ xem xét cách các chàng mẫu và thực hành đã làm điều đó trước khi tôi thực hiện nó như là đứa con tinh thần của riêng tôi. Tôi đã sử dụng nó nhiều lần và nó cũng có giá trị nó.

+0

Điều đó thật tuyệt. Tôi đã đặc biệt yêu cầu loại hỗ trợ này trong .NET. Cảm ơn rất nhiều! – yeyeyerman

6

State design pattern mô tả cách triển khai máy trạng thái hữu hạn.

Có nhiều mẫu thiết kế hơi khác nhau để điều khiển màn hình trong giao diện người dùng, nhưng tôi nghĩ rằng Application Controller design pattern phù hợp với những gì bạn đang cố gắng làm.

+0

Bộ điều khiển ứng dụng mô tả một điều khiển tập trung cho toàn bộ ứng dụng và thực sự hữu ích. Nhưng vẫn không nói về FSM. – yeyeyerman

1

Trong thế giới Java bạn có thể nghĩ đến một Struts hoặc ứng dụng JSF như một FSM (sự kiện này trên trang này/nhà nước đưa chúng ta đến trang/tiểu bang.

Khi mô hình hóa các dòng trong một truyền thống dựa trên web UI Tôi đã tìm thấy bằng cách sử dụng FSM để trở thành một công cụ phân tích cực kỳ hữu ích Bạn có thể nhanh chóng nắm bắt được bản chất của hành vi của ứng dụng. mô hình nhà nước và các mô hình dữ liệu liên quan

Bây giờ chúng tôi có giao diện người dùng phong phú hơn khai thác AJAX tương ứng giữa ap trạng thái nhận xét và "trang" ít rõ ràng hơn. Tuy nhiên, bạn vẫn có thể lý do về hành vi của ứng dụng: ở đây người dùng đang thực hiện này, khi họ kết thúc thay, bạn có thể thực hiện hành động X hoặc Y và sau đó họ có thể thực hiện . Vì vậy, các tiểu bang, các sự kiện và quá trình chuyển đổi vẫn tồn tại, đó chỉ là đại diện của họ là "ảo" hơn một chút.

+0

Tôi đồng ý.Tôi đã tìm kiếm một loại khung công tác Struts để phát triển GUI, vì vậy bạn có thể phân tách logic của luồng công việc từ logic của các hộp thoại. Cảm ơn vì quan điểm của bạn. – yeyeyerman

Các vấn đề liên quan