2016-11-06 20 views
20

Tôi làm việc trên một ứng dụng, cốt lõi trong số đó là rất bộ biểu mẫu web phức tạp. Nguồn gốc của sự phức tạp nàyquản lý các biểu mẫu web phức tạp

  1. quy mô, một số hình thức chứa khoảng 50 trang, trong đó lên đến 30 câu hỏi trên mỗi trang
  2. quy định phức tạp, ví dụ nếu câu trả lời người dùng "không" với câu hỏi 4, sau đó câu hỏi 5-15 không áp dụng, vì vậy cần được loại bỏ từ hình thức

Hiện nay chúng tôi sử dụng Angular Schema Form cho các hình thức, nhưng nó không cung cấp một cách thuyết phục để quản lý số lượng lớn các quy tắc phức tạp giữa các trường biểu mẫu.

Tôi không có nhiều kinh nghiệm với rules-based programming, nhưng dường như với tôi rằng điều này có thể cung cấp cách quản lý tốt hơn các quy tắc trong các trường biểu mẫu. Ví dụ, bằng cách sử dụng một phương pháp dựa trên quy tắc, chúng tôi có thể xác định các quy tắc liên quan đến từng trường biểu mẫu và công cụ quy tắc có thể sử dụng các quy tắc này để quyết định (các) trường nào sẽ hiển thị tiếp theo. Sử dụng cách tiếp cận hiện tại của chúng tôi, chúng tôi đạt được điều này với một lượng lớn JavaScript bắt buộc mà hầu như không thể kiểm tra và duy trì.

Nếu có ai có kinh nghiệm phát triển các biểu mẫu web phức tạp như vậy, tôi muốn được nghe về trải nghiệm của họ, ví dụ: công cụ/thư viện mà họ có thể đề xuất. Ngăn xếp hiện tại của chúng tôi dựa trên JDK (Java, Groovy, Grails) và JavaScript (Angular, Node) để các công cụ/thư viện/khung công tác chạy trên các nền tảng đó sẽ được quan tâm đặc biệt.

+0

Bạn đã so sánh với việc sử dụng một cách chính thức chưa? – charlietfl

+0

@charlietfl no, tôi biết rằng formly là một thư viện góc rất phổ biến khác để phát triển các biểu mẫu, nhưng không nhận thức được ưu và khuyết điểm so với Biểu mẫu góc –

+0

Khó để đánh giá điều gì sẽ giúp đỡ mà không hiểu vấn đề chi tiết nhưng nó chắc chắn âm thanh với tôi như bạn có thể được hưởng lợi bằng cách có nhiều tuyến cho mỗi * "biểu mẫu" * trong đó mỗi tuyến đường là biểu mẫu của chính nó được xác định bởi cây quyết định và mỗi tuyến phụ liên kết với một dịch vụ được chia sẻ. Có thể muốn thử nghiệm một cách công khai góc cạnh và xem liệu nó có giúp bạn với nhiều tính năng hơn sẽ mang lại lợi ích cho bạn – charlietfl

Trả lời

-1

Nếu bạn muốn sử dụng công cụ quy tắc hãy tự hỏi mình những câu hỏi này. Nếu câu trả lời áp dụng, hãy sử dụng nó.

Thuật toán của bạn có phải là một loạt các tính toán hoặc có khả năng ra quyết định chính liên quan không?

  • Nếu bạn có nhiều điều kiện hoặc quy tắc của bạn không phải là rất dạng bảng (Bạn có thể có thể lưu trữ các quy tắc trong một DB), bạn thậm chí có thể mất một cách tiếp cận hỗn hợp nhưng nó khó hơn một chút để duy trì bởi vì bạn có quy tắc trong các phần khác nhau, nhưng dễ dàng hơn để lập trình bởi vì bạn chỉ lập trình các quy tắc cụ thể.

Các quyết định của bạn phức tạp đến mức nào?

  • Nếu bạn có nhiều hơn một vài báo cáo có điều kiện

  • Bạn có thể xác định rõ các quy tắc

Làm thế nào dễ bay hơi là quy tắc của bạn?

  • Bạn chưa biết quy tắc hoặc quy tắc của mình cần linh hoạt và sẽ thay đổi theo thời gian.

Thuật toán của bạn có cần tùy chỉnh tweeking không?

  • Nếu bạn không cần phải tweek cho những thứ như hiệu suất sử dụng một động cơ quy tắc
1

Tôi có kinh nghiệm xây dựng một giải pháp cho loại này của quá trình - phải thừa nhận là không 50 trang hình thức tại một thời điểm nhưng trường hợp sử dụng của tôi đã có các hình thức kỹ thuật dài, trong đó các bộ câu hỏi đã bị ẩn dựa trên câu trả lời trước đó.

Tôi đã viết một công cụ thiết kế thời gian cho một chuyên gia để đặt câu hỏi. Công cụ này trình bày các câu hỏi dưới dạng cây và cho phép các câu hỏi được nhóm thành các khối để làm cho các quy tắc hiển thị/ẩn dễ quản lý hơn cho tác giả. Những quy tắc này được mã hóa đơn giản 'Q10> 123' có nghĩa là khi câu trả lời cho Q10 lớn hơn 123 thì hãy hiển thị câu hỏi này (hoặc khối câu hỏi). Câu trả lời theo yêu cầu của câu hỏi có thể là nhập văn bản, thả xuống các lựa chọn, v.v.

Kết quả của hoạt động thiết kế thời gian của tác giả là định nghĩa XML về cây câu hỏi, chi tiết câu hỏi (nhắc, bắt buộc, loại, tùy chọn vv) và quy tắc hiển thị.

Khi chạy, tôi đã cấp dữ liệu này cho trình phát 'trình phát JavaScript' được nhúng trong trang web. Người chơi tiêu thụ các định nghĩa câu hỏi, thiết lập một mô hình, tạo ra các phần tử hiển thị bắt buộc, vv, tạo ra HTML cần thiết để hiển thị trang. Điều này bao gồm việc chạy kiểm tra khả năng hiển thị dựa trên các quy tắc đó. Kiểm tra này chạy một lần nữa khi một câu trả lời đã được đưa ra để bất kỳ câu hỏi phụ thuộc có thể được ẩn/đi vào xem dựa trên câu trả lời nhất định.

Tại thời điểm người dùng hoàn thành biểu mẫu, chúng tôi đã lưu dữ liệu vào DB bằng cách đăng biểu mẫu ẩn lên máy chủ. Biểu mẫu này bao gồm điểm đánh dấu 'isVisible' cho mỗi câu hỏi cũng được lưu trữ trong DB làm phương tiện để có thể nhanh chóng hiển thị câu trả lời kết quả và biết được câu trả lời ẩn trên cơ sở nếu chúng bị ẩn trong biểu mẫu ở cuối phiên sau đó họ nên được ẩn khi kết quả được hiển thị, in hoặc gửi qua email, vv

Tôi xây dựng ban đầu của tôi trong VBScript (IE là trình duyệt sau đó!), sau đó chuyển nó sang JavaScript, và gần đây hơn cập nhật với JQuery . Nó được sử dụng hàng triệu lần và có vẻ mạnh mẽ và thiết thực.

Tóm lại, bạn cần một công cụ để giúp các chuyên gia của bạn đặt câu hỏi cho các biểu mẫu; bạn cần một phương tiện để lưu và chuyển thông tin đó; bạn cần một cách để xử lý biểu mẫu định nghĩa câu hỏi & cho người dùng; bạn cần một cách để lưu trữ các câu trả lời được đưa ra; và bạn cần một cách để nhanh chóng hiển thị lại các kết quả mà không cần tính lại/ẩn tính toán lại trên tất cả các câu hỏi.

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