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

Forms 处理频繁更改的数据表单的选项,forms,crud,Forms,Crud,处理频繁变化的数据表单有哪些可能的设计 我有一个基本的CRUD web应用程序,其中主数据输入表单每年都会更改。因此,每个记录都应该绑定到表单的特定版本。这是一种新的需求,所以现有的应用程序并没有考虑到这一点 我正在寻找不同的处理方法,希望避免未来的技术债务。以下是我提出的一些选择: 为每个版本创建一个新对象、UI和一组表。这显然是最幼稚的做法 继续将所有字段添加到同一对象和DB表中,但根据表单版本显示/隐藏它们。这将成为一个混乱后,一些变化 构建表单定义,然后动态构建UI,并将数据存储为类似

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

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

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

  • 为每个版本创建一个新对象、UI和一组表。这显然是最幼稚的做法
  • 继续将所有字段添加到同一对象和DB表中,但根据表单版本显示/隐藏它们。这将成为一个混乱后,一些变化
  • 构建表单定义,然后动态构建UI,并将数据存储为类似字典的格式(例如JSON/XML或可能是面向文档的数据库),我认为这对于本应用程序的范围来说太复杂了,尤其是对于UI

还有什么其他的可能性?有人有这样做的经验吗?我正在寻找一些设计模式来帮助处理复杂性。

首先,我将介绍上面的解决方案,然后给出我的答案

  • 为每个表创建一个新表 版本将需要新的 从你开始,每年都在编程 无法动态加入到 新表中包含了新的 柱很容易移动。这看起来很明显,这真的是一个糟糕的选择
  • 您在添加时提到的问题 相同表单的列为
    对的还有,不管你使用什么数据库 正在使用的最大值为多少 它可以处理的列以及有多少列 一行中可以包含的字节数。这可能成为另一个问题
  • 我认为第三个选择是 最接近你想要的。我会的 不将新列数据存储在 JSON/XML,除非用于复制 提高速度。我想这是 你最好的选择
  • 你没有提到的唯一选择 正在将所有数据存储在1中 数据库字段,并使用XML 作语法分析这一选择将使它成为现实 难以查询和编写报告 反对
如果我必须这样做:

  • 第一张桌子上有 列ID(种子)、名称、, 输入类型,创建日期, 过期日期和CssClass。我 我会称之为TBI
  • 第二张桌子会有 5列,ID,输入_ID(带FK至 tbInputs.ID),条目号(带FK至 主/原始表格)值,以及 创建日期。从FK到 主/原始表格将允许您 查找附加到的项目 什么表格。我称之为 表TBInputValue
  • 如果你不 那就计划拥有那张基准表吧 我会使用一个简单的表格来跟踪创建日期,创建者ID, 以及表单id
  • 一旦你有了这些,你就只需要创建一个动态表单,它会把当前所有的活动输入都拉回来并显示出来。我将把所有的动态控件放在某种容器中,比如
    ,因为它允许您在不知道每个元素名称的情况下循环它们。然后在tbInputValues中插入输入的ID及其值
  • 创建一个表单以添加或删除 输入。这意味着你会 没有多少保养 每年要做的工作

  • 我认为这个解决方案似乎不是最有说服力的,但如果执行正确,我确实认为它是最灵活的解决方案,需要最少的技术债务。

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

    您将有一个表,其中一列包含XML,以及该XML适用的年份/版本

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


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

    对于这个特定的应用程序,我们决定像处理一个不断增长的表单一样处理这个问题。由于形式的性质,这似乎比更明确的分离更自然。我们将有一个year->field的映射,用于应用程序中确实需要知道哪一年的数据的部分


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

    这真是个好问题。这是一个需要关注的领域。肯定是a+1。在一般意义上,这就是我所说的第三点。另一个缺点是更复杂的表单需要更复杂的代码来生成表单。e、 g.字段相互依赖,复杂的验证我认为您通常进入了一个相当复杂的领域。我不知道是否会有简单的答案。你有没有考虑过是否有任何可以下载的控件可以解决你的问题?我不希望有一个简单的解决方案。每个有这个要求的应用程序也会有所不同。这就是我开始讨论的原因。我花了一小部分时间寻找解决方案,但我认为很难在现有代码上改进类似的内容。也许对于一个刚刚开始的人来说,这将是一条路。我也很难想象一个通用的解决方案能提供和手工编码表单一样好的用户体验。