В последнее время мы обдумывали эту проблему, и я предложил два варианта, которые кажутся действительными, но имеют разное использование. Один из способов сделать это, аналогично тому, что вы описали, - создать следующее:
- Таблица, содержащая информацию мастера
- Таблица, в которой перечислены типы вопросов, которые должны быть заданы в каждом мастере
- Таблица для хранения данных, введенных пользователем для каждого вопроса
Это очень гибко, но проблема в том, что вам нужно динамически генерировать все элементы управления, необходимые для сбора информации (текстовое поле, раскрывающийся список, радио, загрузка файлов и т. Д.) И сохранять способ отображения этого элемента управления в вашей базе данных.
Другой подход, который мы опробовали в недавнем проекте, - это связать пользовательский элемент управления либо с каждым мастером, либо с типом шага мастера. Это не так модульно, но у вас есть большой контроль над тем, как расположены элементы управления и как вы собираете данные.
Я думаю, что оба подхода полезны в разных сценариях. Использование подхода, основанного на базе данных, позволяет легко генерировать новые вопросы и мастера, но в нем отсутствует удобный для пользователя подход, который мы хотели для нашего нового приложения.