如何设计保存用户输入的不完整数据?
我们有一个Dot net Win表格应用程序,该应用程序只有很少的表格可以填充40多个字段。
当用户填写25个字段,然后意识到他需要保存一些信息才能保存信息,或者他输入了所有数据,但这是一些业务验证错误,需要对此进行纠正之前与他人联系。
在这种情况下,他想将不完整或者不正确的数据保存到某些临时数据存储中,并在以后拥有数据来完成保存操作时取回。
请让我知道实现此目标的最佳方法是什么?
他是我们考虑过的几种选择:
1)创建XML blob并将其保存在本地计算机上(但是,用户可能会从其他计算机上使用它)
2)创建重复的表来存储无效数据(但是,我认为无效数据永远都不应成为数据库的一部分)
解决方案
我们可以将所有无效数据作为纯文本/ xml字段放入一个数据库表中。大概我们不需要对不完整的数据进行排序/搜索。这可能结合了两个想法的好处。
用户将数据发回进行验证时,如何存储数据?我们是否将其存储在会话中?我们可以仅将会话的那一部分保存到数据库中,然后在他/她想要完成输入时将其还原吗?
另一种想法是将表单分成多个子部分,然后在继续操作之前将其保存。 40字段形式似乎有点多余,并且可能会导致难以使用的应用程序。
我们可以将部分表单保留为XML,然后将XML保存到数据库表中,该表还具有用户ID和表单标识符。当用户接下来在原始计算机或者另一台计算机上显示该表单时,系统将检测到部分数据并提示用户重新加载/忽略/删除它。对于所有表单和用户,我们只需要一个表。每个数据库对象都不需要单独的表。
J D提出了一个很好的观点。这个用户界面听起来像是向导的工作。这样,当他们意识到需要更多数据时,它们已经进入了3页,并且我们知道数据是有效的,因为我们一直在逐页进行验证。
我会说选择第二个选项,但是将不完整的数据绑定到会话上,这样我们将获得两件事:
1)当会话过期时,不完整的数据将过期
2)将有一个清晰的连接,即哪个会话(用户)拥有哪些数据
我认为只要将其定期清理(在这种情况下,会话期满),就可以将其存储在数据库中没有任何问题。祝你好运
编辑:如果我们希望它在整个会话中都可用,请将其与用户绑定,并在完成时使其过期。
1) the incomplete data will expire when the session expires
用户希望不完整的数据可用于跨会话登录。
我认为它属于一个单独的表。从业务角度来看,它是一个IncompleteWidget。保存并验证后,它将存储在窗口小部件表中。
映射似乎有些痛苦,但我认为在这种情况下是有道理的。
可能引起争议,但是:将未完成的对象存储在与要存储已完成的对象的数据库表相同的数据库中。
不完整和完整的对象属于同一类实体,只是处于生命的不同阶段。我们可以使用状态字段来指示对象是否已通过验证。这样就解决了问题,而无需引入一种全新的调试和维护机制。