ChatGPT解决这个技术问题 Extra ChatGPT

流利的验证与数据注释

当用于 ASP.NET MVC 验证时,这两个验证包之间的操作差异是什么?它们似乎有相似的对象,一直到它们的对象名称。一个与另一个有关吗?他们有什么区别?这些差异以何种方式表示不同的用例?

Fluent Validation(第 3 方解决方案)

数据注释(微软“烘焙”)

值得注意的是,由于没有建设性而被关闭的问题通常会有很多赞成票,因此它们实际上对人们有帮助。这件事一定有问题
我同意这类问题很有用,但下面的答案对我来说更像是意见,而不是事实。
我也完全同意,但是问“有什么区别”而不是“你的偏好是什么”可能会避免这种情况。
我认为这笔交易是你必须说出它,以便答案更少基于意见而不是事实。不要问“你最喜欢什么?”但是“两者之间的操作差异是什么?”然后你不会得到“我更喜欢 Fluent Validation”这样的答案。而是首先突出差异并其次呈现发现的事物。

G
George Paoli

我更喜欢 Fluent Validation

它使我可以更好地控制我的验证规则与数据注释相比,对不同属性进行条件验证要容易得多它将验证与我的视图模型分开与数据注释相比单元测试要容易得多它对大多数情况都有出色的客户端验证支持标准验证规则


这篇 (webdevbros.net/2010/12/03/…) 文章的更多要点:1. 注释过多会使您的模型看起来很丑(类似于您的第 3 点) 2. 更好的可重用性 3. 更好的性能(因为没有反射)
@Idsa 性能点听起来很可疑。每个模型只需要发生一次反射。这假设一个很好的实现,我不知道这个特定的实现是如何工作的。
@CodeInChaos,看起来你是对的。但是我会保留它,因为我也不确定(并且懒得去发现)它是如何实现的。
我支持 FluentValidation ......它很震撼。从代码 OCD 的角度来看,我喜欢它从视图中移除验证的责任并为其提供自己的类。我在 MVC1 中尝试了 xVal 一段时间……数据注释对于简单的东西来说是可以的,但是一旦你得到了很多规则,你就几乎无法判断 ViewModel 应该代表什么。
@Darin 你如何在视图中传递错误消息?你能举个例子怎么做吗?
R
Robert Harvey

我显然更喜欢数据注释,因为......

所有验证规则都可以在代码中的一个位置(在模型元数据类中)配置,并且不需要在其他任何地方重复。使用 Data Annotation 属性时,对客户端验证有很好的支持(同样——无需重复验证规则!)。可以测试数据注释属性以确保它们存在。社区创建了很好的附加验证属性(例如数据注释扩展)。


我认为大多数这些属性都可以通过某种形式的流利验证来实现。我不知道 OP 中的库是否支持这一点,但原则上这是可能的,也不是很难。
测试属性是否存在的意义何在?这不是基本上重复验证规则吗?
@Sam:通过测试属性是否用 Data Annotation 属性修饰,您不会测试属性本身的功能;你只是确保它在那里。我应该说,两年后的现在,我站在达林一边,同意他的回答。
@Sam,因为您可能想知道是否有人将其从您的模型中删除。
伟大的评论马吕斯。太糟糕了,现在大多数 EF 教程都显示了使用数据注释完成的验证。我最初也被注释的简单性所吸引,但在我尝试实现自定义验证规则后不久,我立即加入了 Fluent Validation 团队......顺便说一句,Darin 停止发布太糟糕了:(他在 StackOverflow 上的评论在 5 年多之后才出现!!!

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅