2009-04-17 9 views
5

Tôi đang triển khai giao diện người dùng kiểu Wizard. Khi người dùng chạy qua trình hướng dẫn, nhấp vào tiếp theo, tùy thuộc vào các lựa chọn họ đã chọn trên mỗi màn hình, người dùng sẽ phải trải qua một bộ màn hình thuật sĩ nhất định.DesignPatterns: Cách nào phù hợp nhất để sử dụng cho giao diện người dùng kiểu thuật sĩ?

Điều này đang được xây dựng trong ASP.NET MVC. Tôi tự hỏi mô hình thiết kế nào là phù hợp nhất để thực hiện logic của chuỗi các bước trong trình hướng dẫn. Một lần nữa, chúng có nhiều đường dẫn thông qua trình hướng dẫn tùy thuộc vào các lựa chọn mà chúng tạo ra.

Tôi có thể sử dụng danh sách được liên kết không? "Command Design Pattern"? Bạn đề xuất món gì?

Nói cách khác: Nơi/Làm thế nào để bạn tóm tắt/đóng gói logic xác định bước tiếp theo trong trình hướng dẫn dựa trên những gì người dùng đã chọn trên một bước cụ thể của trình hướng dẫn?

Trả lời

1

Nói cách khác: Bạn/Tóm tắt/đóng gói logic để xác định bước tiếp theo trong trình hướng dẫn dựa trên những gì người dùng đã chọn trên một bước cụ thể của trình hướng dẫn?

Một cách để làm điều đó là mô hình hóa các lớp Trình hướng dẫn, Bước và Sản phẩm. Có thể một cái gì đó như thế này?

public class Wizard 
{ 
    public Step forward() {//...} 

    public Step backward() {//...} 

    public Step current() {//...} 

    public Product getProduct() {//...} 
} 

public class Step 
{ 
    public String name() {//...} 

    public void commit(Product product) {//...} 

    public void rollback(Product product) {//...} 
} 

public class Product 
{ 
    //... 
} 

Mục đích của Trình hướng dẫn là tạo Sản phẩm (Xe hơi, Máy tính, Nghỉ ngơi, v.v ...).

Trong trường hợp này, Trình hướng dẫn sẽ quyết định bước tiếp theo - có thể dựa trên trạng thái của Sản phẩm mà Trình hướng dẫn đang xây dựng. Wizard sẽ hoạt động như một Builder dưới sự kiểm soát của giao diện người dùng, đó sẽ là Giám đốc và cho Wizard biết khi nào và theo hướng nào để thực hiện chuyển đổi. Tùy thuộc vào Wizard để quyết định bước tiếp theo thực sự là gì. Nhiều nhánh có thể được hỗ trợ, nhưng việc thực hiện đó sẽ bị ẩn đi bên trong Trình hướng dẫn.

Bước sẽ là một phiên bản của Command Pattern với khả năng hoàn tác/làm lại.

3

Mẫu "State" có thể có ý nghĩa, nếu bạn muốn cho phép người dùng điều hướng tiến và lùi qua trình hướng dẫn.

Mẫu công việc cũng có thể có ý nghĩa. Có thể điều tra bằng cách sử dụng nền tảng Windows Workflow.

0

Tôi phải đồng ý với Beau.

Thực ra, nếu bạn cần một bộ quy tắc phức tạp cho logic điều hướng, thì bạn có một trình hướng dẫn GUI-khôn ngoan, nhưng không phải là một trình hướng dẫn trong mui xe.

Nếu những gì đang cố gắng xây dựng thực sự là một thuật sĩ, mỗi màn hình sẽ chảy vào tối đa 2-3 màn hình khác nhau (IMO). Điều đó có thể được lưu trữ dễ dàng vào một cấu trúc rất đơn giản (Cơ sở dữ liệu, tệp cấu hình tĩnh).

+0

Nhưng bạn phải xác định * một số nơi * trình tự các bước tạo nên trình hướng dẫn. Vì chúng tôi cần có khả năng theo dõi các bước trong thuật sĩ mà người dùng đã hoàn thành, để chúng tôi có thể hiển thị tiến độ và những thứ khác. Hoặc thậm chí để họ có thể quay trở lại nơi họ rời đi chẳng hạn. – 7wp

1

Tôi muốn giữ nó đơn giản. Tôi đặt một giá trị trên đối tượng mà tôi đang xây dựng với số bước, vì vậy nếu tôi xây dựng chính sách bảo hiểm, tôi sẽ có một thuộc tính về chính sách cho biết bước đó là gì. Sau đó, tôi có một phương pháp duy nhất là bộ định tuyến và xem xét chính sách và xác định vị trí để gửi nó tiếp theo, bạn có thể tạo thêm logic vào bộ định tuyến để bỏ qua các bước hoặc bạn có thể đặt logic trong từng bước và chuyển hướng trở lại bộ định tuyến phương pháp.