2012-06-28 48 views
0

最近我一直在阅读规格说明,我非常热衷于使用它们。但是,我害怕过度。我应该使用简单验证逻辑的规范吗?

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

感谢, 菲尔

UPDATE: 欲了解更多背景: 我想,我想确认是在域名,而不是在演示文稿中。我将在演示文稿中实施验证,但这将更多地是UI功能。这个想法(我相信)是域不能处于无效状态,也不能依赖于表示。我实际上有一个电话号码实体,许多实体有电话号码,但我认为这可能是对象的价值,但这是另一场辩论:)

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

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

许多感谢, 菲尔

回答

0

你可能会考虑的前置和后置条件(不变或契约式设计)的概念。 前提条件是您的函数必须正确运行的事情。 当你的功能完成并正常退出时,发布条件是事实。

“用户的电话号码有效”可能是您设置功能的良好后置条件。然而,对于前提条件,您有两种选择:(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

+0

我会更新我的问题更多的细节。这些文章虽然是值得思考的。 – Phillip