Language agnostic 应该先检查哪一个代码,功能性检查还是有效性检查?

Language agnostic 应该先检查哪一个代码,功能性检查还是有效性检查?,language-agnostic,validation,Language Agnostic,Validation,当从头开始编写注册表单时,首先让它使用预期的输入,然后返回并捕获/处理意外的输入并处理错误,这有意义吗 另一种方法是处理输入,检查任何约束并确保它们得到正确处理,然后处理典型用例的正确运行 一种方法比另一种更可取吗?如果是,为什么?还有,有没有其他方法来完成这种由两部分组成的任务 为了澄清,我所说的有效性不仅仅是指数据验证,包括业务规则,例如“不超过X人可以注册此事件”一种方法是采用TDD方法(假设您编写单元测试)。从编写单元测试开始,然后努力让这些单元测试通过 在我看来,用户界面的工作应该在最

当从头开始编写注册表单时,首先让它使用预期的输入,然后返回并捕获/处理意外的输入并处理错误,这有意义吗

另一种方法是处理输入,检查任何约束并确保它们得到正确处理,然后处理典型用例的正确运行

一种方法比另一种更可取吗?如果是,为什么?还有,有没有其他方法来完成这种由两部分组成的任务


为了澄清,我所说的有效性不仅仅是指数据验证,包括业务规则,例如“不超过X人可以注册此事件”

一种方法是采用TDD方法(假设您编写单元测试)。从编写单元测试开始,然后努力让这些单元测试通过

在我看来,用户界面的工作应该在最后完成,因为在后端功能上可能有很多工作要做

  • 为验证对象的方法编写测试
  • 编写验证对象的方法
  • 测试直至通过
  • 重复1-3,直到所有方法都经过测试

  • 编写表单并将数据输入到测试和工作验证对象方法中

  • 对处理验证后数据的业务对象使用相同的过程。

    我总是喜欢先对功能进行编码,然后再添加验证。在我看来似乎很好,因为大多数编码都是在开发环境中完成的,在您处理数据时,没有人会提交数据

    但无论你觉得哪种方式都是最好的


    我的方法的缺点是,如果你没有条理,你可能会忘记在某处添加有效性或卫生检查。它确实发生了:-)

    如果不是太多的工作,我会从基本的输入验证开始。特别是日期或标识符,如订单号。放松验证比收紧验证更容易。基本输入验证可以节省大量后端调试时间


    另一方面,假设您所说的是支持多种语言的、美观的、支持Javascript的验证。在这种情况下,最好编写一个简单的第一个版本,并在此基础上开发后端。当输入表单开始接近最终版本时,您可以对其进行润色。

    在我看来,最好的办法是获得一个良好的第一个版本,它可能无法完全处理所有意外情况,但经过深思熟虑和模块化制作。然后,您可以返回并完善逻辑,以便通过测试


    在现实世界中,这种方法是值得的,因为当有一些事情需要处理时,你更有可能更有效率,更有兴趣,而不仅仅是被困在试图找出你头脑中所有的边缘情况并在一开始就处理它们。

    一旦你的功能正常工作,您真的会返回并添加验证代码吗


    我们中的大多数人都想这样做,但我们中的许多人在项目结束时已经没有时间了。

    如果您要将代码分解为“模型”和“UI”,那么其中一些更容易理解,但基本上需要一个设计选择:您的模型对象将承担正确的输入并将责任放在UI上,还是测试正确的输入


    现在,我,作为一个皮带和吊带的家伙,我倾向于回答这个问题“是”:模型将检查域,即使输入无论如何都应该检查。但是在任何情况下,一旦你做出了决定,你就有了答案:如果域检查是定义的一部分,你应该构建它并用所有其他部分测试它。如果您将域检查与功能分开,请分别构建和测试它们。

    我喜欢设置几个与功能相关的字段,然后对该功能进行验证检查,然后对其余部分进行验证,最后填写剩下的功能。

    我强烈赞成先编写验证程序。一旦你有了一些看起来有效的东西,你就很难再回去添加验证器了。通过首先编写验证器(但不一定要处理它们引发的异常),您可以确保完成了它们。这也给了你一个很好的机会去思考你到底期望什么——这可以帮助你思考以后需要解决的特殊情况


    追踪子弹很好,但这一原则不需要应用于项目的每个方面。

    看到太多的数据库,人们忽视了验证方法,我投票赞成先做

    我不确定这样或那样的设计是否优越。。。虽然Leekman先生说,启动功能部分,然后回去做边缘案例的繁琐工作会更有成效,但我不确定我看到了什么

    如果您允许不允许的值(即您的函数代码没有预料到的值)悄悄进入,那么拥有函数代码是没有用的(甚至是危险的)

    相反,如果没有以某种方式处理通过的值,那么伟大的边界检查是无用的


    在生产环境中,如果您没有涵盖有效性和功能性,那么实际上就没有什么可展示的。你做这些事情的顺序应该是个人偏好的问题。如果你觉得没有创意,只是想做一些乏味的事情,那么就编写代码的有效性检查部分。如果你刚刚想出了一个完美的算法来完成你在咖啡休息时间需要的事情,那么坐下来写下功能部分,稍后再回到边界检查。

    +1解释为什么使用端到端工作的版本通常是好的(我想起了实用程序员的“tracer bullet”编码;)Jonik,谢谢你提醒我TPP的那篇文章。是的,通过尝试来处理不确定性