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