2010-02-17 4 views
7

Каковы возможные варианты обработки часто изменяющихся форм данных?Варианты обработки часто изменяющейся формы данных

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

Я ищу различные способы обращения с этим, надеясь избежать будущих технических долгов. Вот некоторые варианты, которые я придумал:

  • Создайте новый объект, пользовательский интерфейс и набор таблиц для каждой версии. Это, очевидно, самый наивный подход.
  • Продолжайте добавлять все поля в один и тот же объект и таблицы DB, но показывать/скрывать их на основе версии формы. После нескольких изменений это станет беспорядком.
  • Определите формы форм, затем динамически создайте пользовательский интерфейс и сохраните данные в виде некоторого словаря, такого как формат (например, JSON/XML или, возможно, документально ориентированная база данных). Я думаю, что это будет слишком сложно для области применения этого приложения, особенно для пользовательского интерфейса.

Какие еще возможности? У кого-нибудь есть опыт в этом? Я ищу некоторые шаблоны проектирования, которые помогут справиться со сложностью.

+0

Действительно хороший вопрос. Его область, на которую нужно смотреть. Определенно +1. – Kangkan

ответ

0

Для этого конкретного приложения мы решили решить проблему, как если бы существовала одна форма, которая постоянно растет. Из-за характера формы это казалось более естественным, чем более четкое разделение. У нас будет отображение поля year-> для частей приложения, которые должны знать, какие данные за этот год.

Для пользовательского интерфейса мы создадим новую страницу для формы каждого года. Динамическая форма создания слишком сложна в этой ситуации.

2

Во-первых, я поговорю с вашими решениями выше, а затем я дам свой ответ.

  • Создания новой таблицы для каждого версии будет требовать нового программирования каждого год, так как вы будете не сможете динамически присоединяться к новой таблице и включить новые столбцов легко. Это кажется довольно очевидным и действительно делает этот плохой выбор.
  • Вопросы, которые вы упомянули при добавлении , столбцы в той же форме:
    correct. Кроме того, какая-либо база данных, которую вы используете , имеет максимальное количество колонок , с которыми оно может справиться, и сколько байт у него может быть в строке. Это может стать еще одной проблемой.
  • Третий вариант, я думаю, это ближе всего к тому, что вы хотите. Я бы не хранил новые данные столбца в JSON/XML, если только для дублирования для увеличения скорости. Я думаю, что это ваш лучший вариант
  • Единственный вариант вы не упомянули хранил все данные в 1 поле базы данных и использование XML для синтаксического анализа. Этот вариант сделает сложным для запроса и записи отчетов против.

Если бы я должен был сделать это:

  1. Первая таблица будет иметь столбцы ID (посеянных), имя, InputType, CreateDate, ExpirationDate и CssClass. I назвал бы его tbInputs.
  2. Вторая таблица будет иметь есть 5 столбцов, ID, INPUT_ID (с FK к tbInputs.ID), entry_id (с FK к основной/исходной таблицы) значение, и CreateDate. FK на главный/оригинальный стол позволил бы вам найти , чтобы найти, какие элементы были прикреплены к . Я бы назвал это столом tbInputValues.
  3. Если у вас нет план по поводу того, что базовая таблица, то Я бы использовал просто таблицу, которая отслеживает дату создания, идентификатор создателя, и form_id.
  4. После того, как у вас есть это, вам просто нужно создать динамическую форму, которая отбрасывает все входы, которые в настоящее время активны, и отображать их. Я бы поставил все динамические элементы управления внутри какого-то контейнера, как <div>, так как он позволит вам прокручивать их, не зная названия каждого элемента. Затем вставьте в tbInputValues ​​идентификатор входа и его значение.
  5. Создайте форму для добавления или удаления ввода . Это означало бы, что вы бы не имели, если какое-либо обслуживание работа каждый год.

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

+0

В общем смысле, это то, что я имел в виду под моим третьим пунктом. Еще один недостаток этого - более сложные формы, требующие более сложного кода для генерации формы. например поля, зависящие друг от друга, сложная проверка –

+0

Я думаю, что вы попадаете в довольно сложную область в целом. Я не знаю, будут ли легкие ответы. Вы посмотрели, есть ли какие-либо элементы управления, которые существуют для загрузки, которые позволят решить вашу проблему? –

+0

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

2

Я думаю, что третий подход (XML) является наиболее гибким. Простая структура XML генерируется очень быстро и может быть легко версией и проверена с помощью XSD.

У вас будет таблица с XML в одном столбце и год/версия, к которой применяется этот xml.

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

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

+0

Очень хороший вопрос об использовании XSD для проверки структуры XML. –