问题标签 [design-by-contract]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
497 浏览

c#-4.0 - Spec# 是否足够稳定可以使用?

这里有人经常使用 Spec# 吗?在我开始到处使用它之前,我想知道它是否足够稳定和强大。看起来语法正在影响 c# 4.0,希望在 4.0 发布后更容易升级。想法?

0 投票
4 回答
963 浏览

perl - 你如何在 Perl 中进行契约式设计?

我正在研究在我们的 Perl 项目中使用 DbC,并且我正在尝试找到在源代码中验证合同的最佳方法(例如检查前置/后置条件、不变量等)

Class::Contract由 Damian Conway 编写,现在由 C. Garret Goebel 维护,但看起来已经有 8 年多没有人碰过它了。

看起来我想使用的是Moose,因为它似乎可以提供可用于 DbC 的功能,但我想知道是否有人有任何资源(文章等)来说明如何解决这个问题,或者如果我找不到任何有用的模块。

有人用 Perl 做 DbC 吗?我是否应该“跳入”Moose,看看我能为我做些什么?

0 投票
4 回答
553 浏览

css - 在 Web 开发中编写 CSS 使用合同的最佳方式是什么?

我们的开发团队在 2 年多前就开始开发企业网页。我们很想知道编写 CSS 使用合同的最佳方式是什么。例如,如果我们有一个 COMP,我们如何就合同达成一致,以便我们的开发人员和我们的设计师达成一致,并且我们不必回头。

是否有可用于此类技术写作的工具?

放在 CSS 和 HTML 页面上的信息的线索是什么?我们的一些设计师认为有些东西应该直接进入 HTML 页面。一般的观点是,所有的样式都应该放在 CSS 中,其他的都放在 html 中。

感谢您的输入。

0 投票
2 回答
131 浏览

c#-4.0 - 您如何看待托管合同工具库

我最近看到了这个视频 http://channel9.msdn.com/pdc2008/TL51/关于托管合同工具库,这看起来非常有趣。可悲的是,他们似乎不会将其包含在语言本身中,这会像 Spec# 中那样更优雅。事实上,在 C#4.0 中拥有这两个选项会很好,因为合同给业务代码增加了很多噪音。

这里有人用过它并有一些真实世界的反馈吗?您还可以将合同添加到类属性甚至变量吗?就像是

也许会很好。

0 投票
9 回答
12943 浏览

unit-testing - 为什么与测试驱动开发相比,按合同设计不那么受欢迎?

你可能会认为这个问题就像之前在 StackOverflow 上提出的这个问题。但我试图以不同的方式看待事物。

在 TDD 中,我们编写包含不同条件、标准、验证码的测试。如果一个班级通过了所有这些测试,我们就可以开始了。这是一种确保班级实际上做它应该做的事情而不是其他任何事情的方法。

如果您逐字遵循Bertrand Meyers的《面向对象的软件构建》一书,则该类本身具有内部和外部契约,因此它只做它应该做的事情,而不做其他事情。不需要外部测试,因为确保遵循合同的代码是类的一部分。

让事情变得清晰的快速示例

TDD

  1. 创建测试以确保在所有情况下,值的范围都是 (0-100)

  2. 创建一个包含通过测试的方法的类。

DBC

  1. 创建一个类,为该成员创建一个var范围为(0-100)的合同,设置合同违约合同,定义一个方法。

我个人喜欢 DBC 方法。


纯DBC不那么受欢迎是有原因的吗?是语言、工具还是敏捷,还是只有我喜欢让代码自己负责?

如果您认为我的想法不对,我会非常愿意学习。

0 投票
9 回答
2788 浏览

c# - 如何在 C# 中证明一个方法永远不会返回 null(按合同设计)

我有一个从不返回空对象的方法。我想澄清一下,这样我的 API 的用户就不必编写这样的代码:

我怎样才能表现出这种意图?

0 投票
1 回答
482 浏览

design-by-contract - 不可为空的对象有什么问题?

我最近一直在研究 DbC 和 Spec#,它们似乎支持不可为空的对象。不幸的是,Spec# 似乎已被放弃。

  1. Spec# 似乎内置了很多不错的语言特性,为什么它被放弃了?
  2. 默认情况下让所有对象都不可为空会有什么问题,所以你必须写 int?, string?甚至MailMessage?如果你真的想要一个可为空的对象?
  3. 我在这里看到了一种 Sql 类比,您可以将类属性检查为可空或不可空。您甚至可以像使用 sql 表列那样对属性施加约束吗?

我没有看到将此类功能内置到语言中的问题。有人可以启发我吗?

0 投票
3 回答
1312 浏览

c# - DbC(按合同设计)和单元测试

我正在使用 C# 4.0 的合同,并且在我使用大量单元测试之前(不使用 TDD)。我想知道 DbC 是否消除了编写外部单元测试的需要?

就我个人而言,我发现合约更适合构建健壮的框架,因为合约与代码本身紧密耦合,并提供其他好处。

你们有什么感想?

0 投票
3 回答
471 浏览

.net - 代码合同,你会用吗?

Microsoft 刚刚发布了Code Contracts,这是一个与 Visual Studio 集成的工具,允许您为 .Net 代码定义合同并获得运行时编译时检查。

观看第 9 频道上的视频,了解如何使用它。

现在它是一个附加组件,但它将成为 .Net 4.0 中基类库的一部分

这是你看到自己使用的东西吗?

我想知道这是否意味着Spec#的死亡?

更新

我所说的 Spec# 的消亡是指我们现在有两个不同的项目来编写合约:
Spec# 是 C# 的演变,它引入了新的关键字和行为;另一方面,微软刚刚发布的是一个可以与任何.Net 语言一起使用的库。
由于后者看起来将成为事实上的标准,我想知道 Spec#

0 投票
2 回答
518 浏览

domain-driven-design - 具有 DbC 支持的业务实体/值对象框架

我认为我在构建业务模型时花费最多的时间是验证业务实体并确保实体对象及其关系保持良好的完整性。我对一个好的实体/值对象框架的梦想将帮助我创建可重用的实体/值对象,并像在数据库中一样轻松地为关系创建约束和规则,但是因为我觉得这确实是它们属于模型的业务规则,应该是完全独立于数据库。

应该很容易定义 Person 对象的 Name 属性应该是必需的,Email 属性应该是必需的并匹配某个正则表达式,并且这些规则应该易于重用 f.ex。在我的网络应用程序中验证输入。

我在使用 Linq to sql 方面绝对有最丰富的经验,尽管使用它确实很好,但由于不支持值对象和其他对象而受到限制。我的问题是实体框架或 NHibernate 会更适合,还是有其他技术更适合我的需求?