Я работал над динамической системой вопросов и ответов, но у меня возникли проблемы с созданием эффективного И гибкого дизайна для этой системы. Я хотел бы знать, есть ли установленный шаблон проектирования или какие-либо рекомендации по разработке этой системы.
У меня есть ряд вопросов. После ответов на них отображается другой набор вопросов в зависимости от ответов на предыдущий набор . Это повторяется до тех пор, пока не исчезнут вопросы.
Все ответы на вопросы являются логическими, множественными или числовыми.
Важная часть заключается в том, что большинство вопросов отображаются только при соблюдении определенного набора критериев, основанных на предыдущих ответах.
Мне нужны критерии для поддержки в основном логической логики, такой как И, Или, Не, Равно, Больше и Меньше.
Например, предположим, что я уже получил ответы на такие вопросы, как Возраст
, Пол
и Государство
.
Один из следующих вопросов - В школе?
, но он должен отображаться ТОЛЬКО, если: Возраст <30 И Пол = Мужской И (Штат = Калифорния ИЛИ Штат = Нью-Йорк)
Сначала у нас было только 3 начальных вопроса, поэтому мы просто использовали 3 столбца для фильтрации второго набора вопросов.
Однако потребности нашего бизнеса росли, и мы начали нуждаться в большем количестве начальных вопросов, добавили больше столбцов и поместили больше логики в эти фильтры.
Это быстро стало слишком жестким и громоздким.
Наша вторая попытка сделать систему более гибкой: сохранить логику фильтрации как JavaScript и запустить интерпретатор JavaScript для фильтрации результатов.
Это работало довольно хорошо для обеспечения гибкости, но получение тысяч строк из базы данных и интерпретация сценариев были чрезвычайно неэффективными и выполнялись слишком плохо для производственной среды.
В конце концов мы объединили два подхода и придумали что-то выполнимое.
Сначала мы отфильтровали наш список на основе нескольких жестко заданных столбцов базы данных, а затем отфильтровали список с помощью интерпретатора JavaScript.
Эта гибридная система по-прежнему имеет много недостатков:
Мне бы очень хотелось услышать предложения, как улучшить этот дизайн.
Моя база данных - это MS SQL Server, серверная часть - .NET C #, а интерпретатор JavaScript - JINT. Реализация пользовательского интерфейса не важна, но это веб-сайт с поддержкой AJAX, который используется для того, чтобы задавать эти вопросы и отвечать на них.