如何管理复杂的数据输入验证

时间:2010-10-18 00:27:08

标签: asp.net validation

当我开发ASP.NET Webform应用程序时,我觉得我正在与当前的战斗作斗争。我经常遇到同样的问题,虽然我最终找到了某种解决方法,但我对结果并不完全满意。

以下是典型问题的示例:

设计需要网格或网格状结果集。此结果集是从数据库中提取的,但是,每行上还有一些非数据绑定的附加控件,但它们的内容用于将数据插入到其他记录中。

这方面的一个很好的例子是显示产品列表,然后根据输入到数量字段中的值和每个产品选择的选项将所选产品添加到购物车。投入混合,你必须同时将多行添加到购物车,它开始变得更复杂。

让我们添加到您无法选择某些产品(互斥)的混合物中,您只能选择一定数量的一种产品,而不是另一种产品,价格可能会在用户选择其商品时发生变化,您根据购买的数量(每件商品和整体订单)获得每件商品的总体折扣,您使用的是信用额度并且不能超过信用额度,也不能购买比任意商品更多的特定商品您的帐户或产品中设置的金额由您的帐户代表(考虑政府限制您可以购买的某些非处方药)等等。等等。

什么开始是一个带有添加到购物车的简单网格,变成了无可救药的业务逻辑混乱,然后当然需要验证并通知用户他们选择的各种错误。

如何在asp.net中处理非常复杂的数据输入方案?你怎么开始设计一个软件来做这一切?

编辑:

请不要建议更改界面,因为界面不是问题。用户可以很好地使用它,并且要求它以它的方式运行。我正在寻求有关如何设计和解决实施问题的帮助。

2 个答案:

答案 0 :(得分:1)

要考虑的一些选项:

  • 分离出验证逻辑,以便您可以从客户端和服务器端代码调用它(启用下一个点)。
  • 使用AJAX执行服务器端验证,并在用户执行各种任务时提供即时反馈,即增加数量。
  • 在执行任何操作之前和之后,向用户提供丰富而清晰的说明/反馈。之前:警告产品X不能用产品Y购买(特别是如果Y已经在购物车中)。之后:准确解释问题并提出纠正方法,例如“你为什么不删除产品Y?”)
  • 优雅地失败,即如果只有一个产品未通过验证,则确保添加所有其他产品。
  • 简化输入流程,例如,一次只允许将一个产品添加到购物车中。

最后一点很重要。复杂的数据输入过程可能会在用户启动之前将其混淆,并且难以尝试理解众多验证错误。这甚至在您开始编写验证逻辑之前就已经存在了。

答案 1 :(得分:1)

不要在代码中放置除基本验证之外的任何内容。后面的代码应该只取用户输入的内容,构建业务对象(或业务对象的集合),并让这些业务对象自行验证。

每个业务规则应该是业务对象上的单个函数调用,它只处理一个规则而不处理任何其他规则。然后,您可以一个接一个地调用它们,并跟踪哪些通过,哪些通过。

当验证失败时,业务对象可以提供足够信息的代码,以便显示正确的错误并突出显示有错误的字段。