【发布时间】:2011-09-23 14:43:29
【问题描述】:
我正在尝试找出在我的 N 层 Asp.net MVC 应用程序中放置验证的位置
一方面,我觉得验证应该与业务对象本身一起在业务层中进行。这意味着当验证规则发生变化时,我只需在一个位置进行更改(例如,现在用户显示名称可以是任何内容,但现在我希望名称至少包含 5 个字符且没有符号)。这使得了解在哪里可以找到验证规则变得很容易,并且更容易在各个流程中保持验证规则的一致性。
另一方面,我也觉得验证应该在视图模型上进行,因为有时您需要对业务对象不需要的特定流程数据进行验证。例如,当用户更改密码时,您希望他们在表单中输入密码两次,这样他们就不会输错密码而导致登录失败。您的 User 业务对象不需要两个密码字段,因为它没有意义,因为您在更改当前密码(或创建新帐户)时只需要两个密码。因此,对我来说将验证放在视图模型上以确保运行特定于流程的验证是有意义的。这样做的缺点是,当验证规则发生变化时,您可能会出现很多需要更新的地方(您必须更改每个与用户打交道的视图模型的规则)。
第 3 个选项是在您的业务对象和视图模型之间拆分有意义的验证。这样做的问题是,我发现很难意识到是否由于视图模型验证失败或业务对象验证失败而触发了验证规则。
【问题讨论】:
标签: validation n-tier-architecture