Показать сообщение отдельно
  #17 (permalink)  
Старый 02.10.2020, 16:11
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от wrbanker
Структура уже есть.
Я не об этом. Представьте, что вам поставили задачу написать цифровой автомат, который по единому правилу обрабатывал входные данные. А чтобы такое написать, входные данные должны отвечать определенным условиям, а не быть просто "кучей", которую тоже можно назвать структурой.

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

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

Например, группируем поля в элементах fieldset. Не важно, что у вопроса анкеты может быть только одно поле, оно все равно должно быть помещено в fieldset. Это оговаривается правилом, условием автомата. В fieldset в оговоренном атрибуте, например, data-fields описаны имена полей, значения которых надо получить/проверить...

<fieldset data-fields="neme1,neme2">

Не важно что поле одно, оно все равно в этом атрибуте должно быть описано в этом атрибуте.

Автомат получает коллекцию fieldset, обходит циклом, извлекает имена полей из data-fields и получает их массив.

var fields = elm.dataset.fields.split(',');


Обходит их циклом, в котором можно узнать все о нем, и имя, и тип, и значение - form[fields[i]].name, form[fields[i]].type, ...

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

Но можно поступить ведь иначе - data-fields, это не просто текст, а json, в котором одно свойство описывает поля, а второе объект или значение false. Если это объект, то это ссылка на функцию, в которую нужно передать значения/состояния полей, а функция вернет результат. В этом случае просто будет добавить функцию для обработки любых индивидуальных условий, а в атрибуте ссылку на нее. Сам автомат переписывать не нужно будет.

То есть структура это не просто набор вопрос/поля, а подчинена определенному конечному автомату.

Последний раз редактировалось laimas, 02.10.2020 в 16:14.
Ответить с цитированием