【发布时间】:2011-02-04 14:17:41
【问题描述】:
不久前我曾就这个主题提出过类似的问题,并得到了一些很好的反馈,但我仍然对如何继续存在一些疑问。
这里是场景...
应用允许用户发布和删除他们关于视频的 cmets。
当用户发表评论时,UI 层传递评论字符串和 userId (guid),删除时将 commentId (int) 和 userId (guid) 传递给 BLL,然后传递给 DAL。
在 UI 层,我假设我需要进行全面验证,因此我使用客户端(如果适用)和服务器端验证确保以下内容:
- userId 实际上是一个 guid
- userId存在于用户数据库中(通过调用BLL方法)
- userId 是与commentId 关联的一个(用于删除)(通过调用BLL 方法)
- 评论不为空
- 评论不超过最大长度
- commentId > 0
- commentId 存在于数据库中(通过调用 BLL 方法)
- videoId > 0
- 数据库中存在videoId(通过调用BLL方法)
在所有这些验证发生后,我将调用 BLL 方法
保存(字符串注释,int videoId,字符串 userId) 或者 删除(int commentId, string userId)
由于 BLL 也可以用作 Web 服务或其他页面/应用程序,我知道我也需要在 BLL 中进行验证。根据我了解到的情况,我认为我需要重做我在 UI 层中所做的所有相同验证:
- userId 实际上是一个 guid
- userId存在于用户数据库中(通过调用BLL方法)
- userId 是与commentId 关联的一个(用于删除)(通过调用BLL 方法)
- 评论不为空
- 评论不超过最大长度
- commentId > 0
- commentId 存在于数据库中(通过调用 BLL 方法)
- videoId > 0
- 数据库中存在videoId(通过调用BLL方法)
这是正确的吗?除非必须,否则我讨厌进行额外的数据库调用!
现在我需要调用相关的 DAL 调用来实际进行数据库更改。我需要在 DAL 中再次执行上述哪些验证?
这个应用程序没有被出售或任何东西,但我想了解处理验证的最佳方法,而不会因为我可能需要或可能不需要的额外数据库调用而降低性能。
【问题讨论】:
-
我希望知道哪些项目应该在哪一层进行验证。
标签: c# asp.net parameters validation