例如,您可以验证电话号码或电子邮件,这些都是FV文档中的全部内容,但是如果您需要确保经理“ X”的员工尚未使用该电话号码,该怎么办?我知道可以通过所有自定义验证程序选项来执行此操作。但是我应该在那里做吗?
如果我将此逻辑放入复杂的自定义FluentValidation中,我会担心自己在错误的位置使用此逻辑进行编码。传统上,我只会将其添加到我通常要进行添加/保存的区域中。
由于我已经为我的视图模型设置了流利的验证,并且我正在那里进行其他类型的验证,因此似乎很有吸引力将所有内容都放在一个地方。但是,这意味着,如果我曾经在非Web应用程序中重用我的逻辑,则必须记住以其他方式执行这些验证器,而不是通过modelbinder IsValid()
将其自动化。尽管我并没有花费额外的时间来使我的项目成为模块化。我离题了。
答案 0 :(得分:5)
不,它实际上是一个好地方。无论基础框架如何,您都希望将验证放在同一位置,并使其可重复用于您的逻辑。
在ASP.NET中使用属性验证和ModelStateDictionary将您的逻辑绑定到ASP.NET,而FluentValidation可以与所有内容一起使用。您仍然可以使用服务来包装该逻辑,并且仅在验证成功后才在其中添加/更新实体。我经常使用fluentvalidation,即使在需要执行数据库查询且工作正常的情况下也是如此。我可以简单地从ASP.NET切换到控制台应用程序或任何其他应用程序,并且两者的逻辑完全相同。
将验证逻辑分为几个区域听起来并不像最佳实践。