Fra*_*ers 5 .net c# mysql sql sql-server
我是C#和SQL的新手.但是在过去的几年里,在大学学习时,一个问题真的开始在我内心燃烧.这里是:
在我看来,有两种非常通用的方法来处理输入验证(即检查所需的字段,以及正确范围内的数据等).
第一种,以及传统方式显示的方式是:开发UI后,以某种方式将其连接到数据库后端.在用户界面上,检查输入是否正确,例如空白文本框,数字范围,或确保选中了收音机或复选框等.
第二种,以及数据库开发中显示的方式是:在字段上设置检查约束,例如不允许空值,唯一值,甚至范围和必填字段.
我的困境是这样的.鉴于在C#这样的现代语言中你可以进行一般的执行处理,并且考虑到大多数数据库(例如SQL Server)在处理有关提交全部或者没有提交的数据更改方面都建立了大联盟容错.像这样的细节,在这个层面上,除了最简单的程序之外,很难编程.
所以我的问题是,为什么不直接在数据库后端的表中构建所有需求.利用前面提到的容错功能,忘记编写if语句以确保输入正确的数据,而只是在未提交数据时使用通用的catch all execption处理程序.
也许这就是它是如何完成的,如果是这样我真的很想知道.如果没有,为什么?我的偏好是尽可能避免编写代码.在更新方面,代码更少,调试更少,问题更少.因此,我倾向于采用让DB后端完成工作的方法.这是一般的正确做法.
我知道一般的执行处理在资源方面被认为是"昂贵的".但是,一旦你通过5或10个if语句来处理不同的字段及其约束,那么只需执行一般的execption处理程序就必须更加高效.整体而言,它似乎更容易理解.(至少我这样做).
感谢您对此的帮助.
好的,这就是为什么你需要在两个地方.
首先,数据的完整性应该是最重要的,数据可以直接在数据库表中进行更改(故意通过脚本来更新一百万个价格或意外,甚至是那些试图破坏数据库或从公司窃取的心怀不满或犯罪的员工) .因此,不顾一切地避免在数据库中直接使用约束而导致数据不良.
现在在用户界面级别,您希望防止用户浪费时间提交错误数据,并且您希望防止服务器和网络浪费时间尝试处理它,因此您在该级别编写检查.此外,如果您需要插入多个表并且不使用转换(您应该使用但我怀疑它发生的频率低于它应该的那样),您不希望数据处于不一致状态.此外,用户讨厌当你尝试插入并且它失败并且告诉你X是错的然后他们修复了X并且现在Y错了但是之前错了,这个过程只是没有达到Y之前.
您通常无法构建用于检入数据库的所有逻辑.也没有充分验证用户输入是打开自己攻击的好方法.
在每种方法中编写少量保护代码的一种方法是"代码合同",这是微软研究的产物.
所有输入都应在客户端和服务器端验证.总是.
还有一个巨大的捕获,很难分辨哪个字段出错.所以你最终会在另一端编写很多字段爆炸代码.
| 归档时间: |
|
| 查看次数: |
217 次 |
| 最近记录: |