2016-11-06 55 views
20

我在一個應用程序上工作,其核心是一個複雜的Web窗體集。這種複雜性管理複雜的Web表單

  1. 規模的來源,一些表單包含大約50頁,其中每頁上
  2. 複雜的規則,例如多達30個問題如果用戶回答「否」問題4,那麼問題5-15不適用,所以應該從形式

目前我們使用Angular Schema Form的形式被刪除,但它並沒有提供令人信服的方式管理表單域之間的大量複雜規則。

我對rules-based programming沒有太多經驗,但在我看來,這可能提供了一種管理表單字段之間規則的更好方法。例如,使用基於規則的方法,我們可以定義與每個表單字段關聯的規則,規則引擎可以使用這些規則來決定下一個要顯示的字段。使用我們目前的方法,我們通過大量命令式的JavaScript來實現這一目標,這幾乎不可能測試和維護。

如果任何人有開發這種複雜的網絡表單的經驗,我很想知道他們的經驗,例如工具/庫,他們可以推薦。我們當前的堆棧基於JDK(Java,Groovy,Grails)和JavaScript(Angular,Node),所以在這些平臺上運行的工具/庫/框架將會引起特別的興趣。

+0

你有沒有比較使用角形? – charlietfl

+0

@charlietfl不,我意識到formly是另一個非常受歡迎的Angular庫,用於開發表單,但與Angular Schema表單相比並沒有意識到優缺點 –

+0

很難真正評估在沒有更多理解問題的情況下會有什麼幫助詳細信息,但對我來說聽起來確實如此,因爲每個*「form」*有多條路由可能會使您受益。其中每條路由都是由決策樹決定的自己的形式,並且每條子路由綁定到共享服務。可能想嘗試測試出有棱角的形狀,看看它是否可以幫助你更多的功能,將有利於你 – charlietfl

回答

-1

如果你想使用規則引擎問自己這些問題。如果答案適用,請使用它。

您的算法是一堆計算還是涉及重大決策能力?

  • 如果你有很多條件或您的規則不是很表格(您可能能夠存儲在一個數據庫的規則),你甚至可以採取一種混合的方法,但它是一個有點難以維持,因爲你有規則在不同部分,但更容易編程,因爲您只編程特定規則。

您的決定有多複雜?

  • 如果您有幾個條件語句

  • 更可以清晰地定義規則

如何波動是你的規則?

  • 您還不瞭解您的規則,或者您的規則需要靈活,並且會隨着時間而改變。

您的算法是否需要自定義的tweeking?

  • 如果您不需要tweek的東西像性能使用規則引擎
1

我有建立一個解決方案,這種類型的處理經驗 - 誠然不是50表單頁面在一個時間但是我的用例確實有很長的技術形式,其中一組問題基於較早的答案而隱藏起來。

我爲專家設計了一個設計時間工具來設置問題。該工具將問題呈現爲樹狀結構,並允許將問題分組爲塊,以便爲作者更輕鬆地管理顯示/隱藏規則。這些規則被編碼爲簡單的'Q10> 123',意思是當Q10的回答大於123時,顯示這個問題(或問題塊)。問題要求的答案可以是文本輸入,下拉選擇等。

作者設計時活動的結果是問題樹的XML定義,問題詳細信息(提示,強制,類型,選項等)和可見性規則。

在運行時,我將它提供給嵌入在網頁中的JavaScript'播放器'。玩家使用問題定義,建立模型,創建所需的顯示元素等,生成呈現頁面所需的HTML。這包括根據這些規則運行可見性檢查。當給出答案時,此檢查再次運行,以便可以根據給定答案隱藏/顯示任何相關問題。

在用戶完成表單的位置,我們通過向服務器發佈隱藏表單將數據保存到數據庫。這種形式包括每個問題的'isVisible'標記,它也被存儲在數據庫中,作爲一種手段,能夠快速顯示結果答案,並知道哪些隱藏了,因爲如果它們隱藏在表格末尾當結果被顯示,打印或通過電子郵件發送等等時,他們應該被隱藏起來。

我最初在VBScript中建立了我的礦井(IE瀏覽器當時就是瀏覽器!),然後將它移動到JavaScript,最近更新了JQuery 。它已經被使用了數百萬次,似乎是健壯和實用的。

總之,您需要一個工具來幫助您的專家設置表格的問題;您需要一種手段來保存和傳輸該信息;你需要一種方式來處理用戶的問題定義表格&;你需要一種方法來存儲給出的答案;並且您需要一種快速重新顯示結果的方法,而無需重新計算所有問題的顯示/隱藏。