【问题标题】:Should I use specifications for simple validation logic?我应该为简单的验证逻辑使用规范吗?
【发布时间】:2012-06-29 10:59:47
【问题描述】:

我最近一直在阅读规范,我非常热衷于使用它们。但是,我害怕做得过火。

例如,如果我有一个带有电话号码属性的 User 实体,我是否需要将电话号码规范测试放在 setter 中,或者 setter 中的验证逻辑是否足够?

谢谢, 菲尔

更新: 有关更多上下文: 我想我希望验证在域中,而不是在演示文稿中。我将在演示文稿中实现验证,但这更像是一个 UI 功能。这个想法(我相信)是域不能处于无效状态,也不能依赖于演示文稿。我实际上有一个电话号码实体,并且许多实体都有电话号码,虽然我认为这可能是价值对象,但这是另一个争论:)

我只是想知道在属性设置器中使用规范是否过分。我可以看到的一个优点是规范可以在层之间共享,即表示层,以便您可以共享验证代码。

如您所见,我不确定这是否是正确的方法。

非常感谢, 菲尔

【问题讨论】:

    标签: validation specifications


    【解决方案1】:

    您可能会研究前置条件和后置条件的概念(不变量或合同设计)。 前提条件是您的功能正确运行所必须满足的条件。 后置条件是在您的函数完成并正常退出时为真。

    “用户的电话号码有效”可能是您的 setter 函数的一个很好的后置条件。但是,您有 2 个前置条件选择:(1) 使其成为 setter 函数的前置条件,即传递给它的任何内容都是有效的,或者 (2) 对 setter 函数制定更宽松的前置条件并执行错误检查在你的 setter 函数中。选项 (1) 实质上将验证责任转嫁给了客户端。选项 (2) 赋予您的用户实体处理错误的责任。

    我认为您选择的设计将取决于您的特定应用的大局。

    以下是一些关于不变量和合同设计的链接: http://svengrand.blogspot.com/2008/11/preconditions-postconditions-invariants.html http://en.wikibooks.org/wiki/Computer_Programming/Design_by_Contract

    【讨论】:

    • 我会更详细地更新我的问题。不过这些文章值得深思。
    猜你喜欢
    • 2010-12-01
    • 2011-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-25
    • 2020-11-30
    • 2011-08-26
    相关资源
    最近更新 更多