处理频繁变化的数据表单的选项

时间:2010-02-17 16:42:24

标签: forms crud

有哪些可能的设计可以处理频繁变化的数据表单?

我有一个基本的CRUD Web应用程序,主要数据输入表单每年都会更改。因此,每条记录都应该与表单的特定版本绑定。这个要求是新的,所以现有的应用程序并没有考虑到这一点。

我正在寻找不同的处理方式,希望避免未来的技术债务。以下是我提出的一些选择:

  • 为每个版本创建一个新对象,UI和一组表。这显然是最天真的方法。
  • 继续将所有字段添加到同一对象和数据库表中,但根据表单版本显示/隐藏它们。经过一些改变后,这将变得一团糟。
  • 构建表单定义,然后动态构建UI并将数据存储为某些字典格式(例如JSON / XML或可能是面向文档的数据库)我认为这对于此应用程序的范围来说太复杂了,尤其是用户界面。

还有哪些其他可能性?有没有人有这方面的经验?我正在寻找一些设计模式来帮助处理复杂性。

3 个答案:

答案 0 :(得分:2)

首先,我将在上面谈谈您的解决方案,然后我会给出答案。

  • 为每个人创建一个新表 版本将需要新的 每年编程,因为你会 无法动态加入 新表并包含新表 列很容易。这似乎很明显,真的让这个选择不好。
  • 您提到的添加问题 相同形式的列是
    正确。无论你有什么数据库 正在使用的最大数量是多少 它可以处理的列数和数量 它可以连续存在的字节数。这可能成为另一个问题。
  • 我认为第三种选择是 最接近你想要的。我会 不将新列数据存储在 JSON / XML,除非是用于复制 提高速度。我想是的 你最好的选择
  • 你没有提到的唯一选择 将所有数据存储在1中 数据库字段和使用XML 解析。这个选项会成功 难以查询和撰写报告 对

如果我必须这样做:

  1. 第一张表有 列ID(种子),名称, InputType,CreateDate, ExpirationDate和CssClass。一世 将其称为tbInputs。
  2. 第二张桌子就有了 5列,ID,Input_ID(FK为 tbInputs.ID),Entry_ID(FK为 主/原始表)值,和 CREATEDATE。 FK到了 主/原始表将允许您 找到附加的物品 什么形式的入口。我会称之为 table tbInputValues。
  3. 如果你不这样做    然后计划拥有那个基表    我会使用一个简单的表来跟踪创建日期,创建者ID, 和form_id。
  4. 一旦你有了这些,你只需要创建一个动态表单,它可以回退当前活动的所有输入并显示它们。我会将所有动态控件放在某种容器中,如<div>,因为它允许您在不知道每个元素的名称的情况下循环遍历它们。然后在tbInputValues中插入输入的ID及其值。
  5. 创建表单以添加或删除 输入。这意味着你会 没有太多维护 每年都要做的工作。
  6. 我认为这个解决方案似乎不是最有说服力的,但如果执行得当,我认为这是您最灵活的解决方案,需要最少的技术债务。

答案 1 :(得分:2)

我认为第三种方法(XML)是最灵活的。生成一个简单的XML结构非常快,可以轻松地对XSD进行版本控制和验证。

您有一个表格,其中包含一列中的XML以及此xml适用的年份/版本。

基于模式生成UI代码基本上是个坏主意。如果您不需要进行大量验证,则可以选择一个简单的可编辑表格。

如果您每年都需要一个自定义表单,我会将其视为一种工作保证:-)尽管如此,使版本控制机制和扩展变得透明和明确是很重要的。

答案 2 :(得分:0)

对于这个特定的应用程序,我们决定处理问题,好像有一种形式不断增长。由于形式的性质,这似乎比更明确的分离更自然。我们将为应用程序的某些部分提供year-&gt;字段的映射,这些部分需要知道哪一年的数据。

对于用户界面,我们将为每年的表单创建一个新页面。在这种情况下,动态表单创建过于复杂。