处理频繁更改的数据表单的选项

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

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

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

  • 为每个版本创建一个新对象,UI和一组表。 这显然是最天真的方法。
  • 继续添加所有字段到相同的对象和数据库表,但基于表单版本显示/隐藏它们。 经过一些改变后,这将变得很糟糕。
  • 构建表单定义,然后动态构建UI并将数据存储为格式的字典(例如JSON / XML或面向文档的数据库)我认为这对于此应用程序的范围来说太复杂了,特别是对于UI 。
  • 还有什么其他的可能性? 有没有人有这样的经验? 我正在寻找一些设计模式来帮助处理复杂性。


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

  • 为每个版本创建一个新表需要每年进行一次新的编程,因为您无法动态加入新表并轻松添加新列。 这似乎很明显,真的使这是一个不好的选择。
  • 您提到的将列添加到相同表单的问题是
    正确。 此外,无论您使用的是哪种数据库,最多可以处理多少个列,以及可以连续处理多少个字节。 这可能成为另一个问题。
  • 我认为的第三种选择是最接近你想要的。 除非是为了增加速度,否则我不会将新列数据存储在JSON / XML中。 我认为这是你最好的选择
  • 您没有提到的唯一选项是将所有数据存储在1个数据库字段中,并使用XML进行分析。 这个选项会使查询和撰写报告变得困难。
  • 如果我必须这样做:

  • 第一个表将具有列ID(种子),Name,InputType,CreateDate,ExpirationDate和CssClass。 我会称之为tbInputs。
  • 第二个表将有5列,ID,Input_ID(FK到tbInputs.ID),Entry_ID(FK到主/原始表)值和CreateDate。 主要/原始表格的FK将允许您查找哪些项目被附加到表格输入。 我会调用这个表tbInputValues。
  • 如果您不打算使用该基础表,那么我将使用一个简单的表来跟踪创建日期,创建者ID和form_id。
  • 一旦你有了这些,你只需要创建一个动态表单来回收当前活动的所有输入并显示它们。 我会把所有的动态控件放在某个容器中,比如<div>因为它可以让你在不知道每个元素的名字的情况下遍历它们。 然后将输入的ID和它的值插入到tbInputValues中。
  • 创建一个表单来添加或删除一个输入。 这意味着你每年都没有太多的维护工作。
  • 我认为这个解决方案可能看起来不是最雄辩的,但如果正确执行,我认为这是您最灵活的解决方案,需要最少的技术债务。


    我认为第三种方法(XML)是最灵活的。 一个简单的XML结构生成速度非常快,可以很容易地根据XSD进行版本化和验证。

    你需要一张表格,在一列中保存XML,这个xml适用于年份/版本。

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

    如果你每年都需要一个自定义表单,我会把它看作是一种工作保证:-)尽管如此,版本机制和扩展是透明和明确的,这一点很重要。


    对于这个特定的应用程序,我们决定处理这个问题,好像有一种形式不断增长。 由于形式的性质,这看起来比更明确的分离更自然。 对于需要了解哪些数据是哪年的应用程序的某些部分,我们将绘制year-> field的映射。

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

    链接地址: http://www.djcxy.com/p/44779.html

    上一篇: Options for handling a frequently changing data form

    下一篇: Tornado TCP Server / Client process communication