我应该使用简单验证逻辑的规范吗?

时间:2012-06-28 00:40:35

标签: validation specifications

我最近一直在阅读有关规格的内容,我非常热衷于使用它们。但是,我害怕过度。

例如,如果我有一个具有电话号码属性的用户实体,我是否需要将电话号码规范测试放入设置器中,或者设置器中的验证逻辑是否足够?

谢谢, 菲尔

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

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

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

非常感谢, 菲尔

1 个答案:

答案 0 :(得分:0)

您可能会研究前后条件(不变量或合同设计)的概念。 前置条件是您的功能正常运行必须符合的条件。 发布条件是在函数完成并正常退出时将成立的事情。

"用户的电话号码有效"对于你的setter函数来说,这可能是一个很好的后置条件。但是前置条件有两种选择:(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