【问题标题】:Is it bad to deploy code contracts into a production environment?将代码合约部署到生产环境中是不是很糟糕?
【发布时间】:2011-02-15 20:50:29
【问题描述】:

我引用这个answer(强调我的):

查看 ContractClass 和 ContractClassFor 属性。这允许您在单独的程序集中使用代码协定编写类。这使您可以将合约用于开发工作,不会弄乱您的代码,并且还意味着您不必使用实时代码部署合约

  1. 为什么不希望部署合同?

  2. 从最佳实践的角度来看,合同是否严格用于开发和质量控制?

【问题讨论】:

  • 这是一对非常好的问题。我最近问过自己同样的问题。

标签: .net code-contracts


【解决方案1】:
  1. 您通常不希望在发布版本上部署后置条件合同。这是为了确保您不会让使用您的程序集的人遇到由您负责的错误。我敢肯定还有其他原因,但这是我想到的第一个原因。

  2. 目前,据我所知,没有关于代码合同的单一最佳实践观点。有多种使用代码契约的方法(在代码契约用户手册中有描述),每种方法都有自己的特定指南。

正如我在 cmets 中所述,您引用的答案也不完全正确。

【讨论】:

  • 让我直说。您不想让使用您的程序集的人或应用程序的最终用户遇到由他们或您负责的错误吗?所以解决方案是关闭合约,让错误波及整个系统,并可能导致底层数据损坏?害怕!就我个人而言,我会在发布后的头几个月保留完整的合同,如果性能有问题,可能会在以后禁用不太重要的合同。隐藏代码问题并不能让它们消失。
  • 您的代码应该优雅地处理“问题”,如果可能,恢复到有效状态。我发现向您的应用程序或 api 的用户抛出 ContractException 并不能优雅地处理问题。不满足的先决条件可以使用 Contract.Requires() 引发更有意义的异常(例如 ArgumentNullException)。
  • 我明白你的意思,但我认为在这种情况下,它不是一个先决条件。如果你得到一个 ContractException,那么开发者犯了一个错误。如果存在应该优雅处理的问题,那么这些只是例外情况,您应该为这些情况使用正常例外。这些特殊情况被认为是“符合规范的”。合同违规被视为不合规格。但是,这当然是我的看法。
  • 请参阅devjourney.com/blog/code-contracts-part-6-runtime-support ,这详细描述了您何时希望在发布版本中启用合同,以及要启用什么样的合同。
  • @WaiHaLee 说得对,幸好回程机还是有参考的:)web.archive.org/web/20110504123425/http://devjourney.com/blog/…
猜你喜欢
  • 1970-01-01
  • 2010-10-30
  • 1970-01-01
  • 1970-01-01
  • 2010-10-18
  • 2011-10-06
  • 2020-01-29
  • 1970-01-01
  • 2011-09-20
相关资源
最近更新 更多