Разработка гибкой и эффективной системы вопросов и ответов

Я работал над динамической системой вопросов и ответов, но у меня возникли проблемы с созданием эффективного И гибкого дизайна для этой системы. Я хотел бы знать, есть ли установленный шаблон проектирования или какие-либо рекомендации по разработке этой системы.

Что я пытаюсь сделать

У меня есть ряд вопросов. После ответов на них отображается другой набор вопросов в зависимости от ответов на предыдущий набор . Это повторяется до тех пор, пока не исчезнут вопросы.

Все ответы на вопросы являются логическими, множественными или числовыми.

Важная часть заключается в том, что большинство вопросов отображаются только при соблюдении определенного набора критериев, основанных на предыдущих ответах.
Мне нужны критерии для поддержки в основном логической логики, такой как И, Или, Не, Равно, Больше и Меньше.

Например, предположим, что я уже получил ответы на такие вопросы, как Возраст , Пол и Государство .
Один из следующих вопросов - В школе? , но он должен отображаться ТОЛЬКО, если: Возраст <30 И Пол = Мужской И (Штат = Калифорния ИЛИ Штат = Нью-Йорк)

Кто-нибудь слышал аналогичного шаблона дизайна? Как бы вы подошли к этому проекту?


Общие сведения

Я попробовал столбцы базы данных

Сначала у нас было только 3 начальных вопроса, поэтому мы просто использовали 3 столбца для фильтрации второго набора вопросов.

Однако потребности нашего бизнеса росли, и мы начали нуждаться в большем количестве начальных вопросов, добавили больше столбцов и поместили больше логики в эти фильтры.

Это быстро стало слишком жестким и громоздким.

Я попробовал интерпретатор логики.

Наша вторая попытка сделать систему более гибкой: сохранить логику фильтрации как JavaScript и запустить интерпретатор JavaScript для фильтрации результатов.

Это работало довольно хорошо для обеспечения гибкости, но получение тысяч строк из базы данных и интерпретация сценариев были чрезвычайно неэффективными и выполнялись слишком плохо для производственной среды.

Я попробовал гибрид.

В конце концов мы объединили два подхода и придумали что-то выполнимое.
Сначала мы отфильтровали наш список на основе нескольких жестко заданных столбцов базы данных, а затем отфильтровали список с помощью интерпретатора JavaScript.

Эта гибридная система по-прежнему имеет много недостатков:

  • Логика находится в двух разных системах (логика базы данных SQL и интерпретатор JavaScript)
  • Интерпретация JavaScript выполняется медленно и, вероятно, является излишним для необходимой простой логической логики
  • Систему очень сложно поддерживать, особенно потому, что логика JavaScript всегда должна быть написана разработчиком.

Мне бы очень хотелось услышать предложения, как улучшить этот дизайн.

Дополнительная информация

Моя база данных - это MS SQL Server, серверная часть - .NET C #, а интерпретатор JavaScript - JINT. Реализация пользовательского интерфейса не важна, но это веб-сайт с поддержкой AJAX, который используется для того, чтобы задавать эти вопросы и отвечать на них.

13
задан Scott Rippey 12 February 2012 в 09:19
поделиться