Я работаю над динамической системой вопросов и ответов, но мне не удается создать эффективный и гибкий дизайн для этой системы. Я хотел бы узнать, существует ли установленная схема проектирования или какие-либо рекомендации для проектирования этой системы.
Что я пытаюсь сделать
У меня есть набор вопросов. После ответа на них отображается еще один набор вопросов, в зависимости от ответов на предыдущий набор. Это повторяется, пока больше вопросов не потребуется.
Ответы на вопросы являются логическими, множественными или числовыми.
Важная часть заключается в том, что большинство вопросов отображаются только при выполнении определенного набора критериев на основе предыдущих ответов.
Мне нужны критерии для поддержки в основном логической логики, такой как "И", "Или", "Равно", "Больше и меньше".
Например, скажем, я уже получил ответы на такие вопросы, как Age
, Gender
и State
.
Один из следующих вопросов: In School?
, но он должен ТОЛЬКО отображаться, если: Age < 30 AND Gender=Male AND (State = CA OR State = NY)
Кто-нибудь слышал о подобном шаблоне дизайна? Как вы подходите к этому дизайну?
Фоновая информация
Я пробовал столбцы базы данных
Сначала у нас было только 3 начальных вопроса, поэтому мы использовали только 3 столбца для фильтрации второго набора вопросов.
Однако наши потребности в бизнесе росли, и мы начали требовать больше начальных вопросов, добавили больше столбцов и добавили больше логики в эти фильтры.
Это быстро стало слишком жестким и громоздким.
Я попробовал Logic Interpreter
Наша вторая попытка сделать систему более гибкой: сохранить логику фильтрации как JavaScript и запустить интерпретатор JavaScript для фильтрации результатов.
Это работало довольно хорошо для гибкости, но извлечение тысяч строк из базы данных и интерпретация сценариев было крайне неэффективным и выполнялось слишком плохо для производства.
Я попробовал Hybrid
Мы, наконец, объединили два подхода и придумали что-то выполнимое.
Сначала мы отфильтровали наш список на основе нескольких жестко закодированных столбцов базы данных и далее отфильтровали список с помощью интерпретатора JavaScript.
В этой гибридной системе все еще есть много недостатков:
- Логика находится в двух разных системах (логика базы данных SQL и интерпретатор JavaScript)
- Интерпретация JavaScript медленна и, вероятно, слишком сложна для простой логической логики.
- Систему очень сложно поддерживать, особенно потому, что логика JavaScript всегда должна быть написана разработчиком.
Мне бы очень хотелось услышать предложения по улучшению этого дизайна.
Другая информация
Моя база данных - MS SQL Server, бэкэнд -.NET С#, а интерпретатор JavaScript - JINT. Реализация UI не важна, но это веб-сайт, поддерживающий AJAX, который задает и отвечает на эти вопросы.