【问题标题】:Which should I use, CodeContract or CuttingEdge.Conditions?我应该使用哪个,CodeContract 或 CutEdge.Conditions?
【发布时间】:2012-03-10 00:22:12
【问题描述】:

我研究了使用条件框架来验证数据,而不是

if(cond) throw new SomeException();

SomeFramework.MakeSure(cond);

最后我的选择是使用CodeContractCuttingEdge.Conditions 框架。

我无法决定使用哪个框架。我可以告诉你,我不喜欢“CodeContract”框架的一点是,你必须安装额外的msi 才能使用它以及你需要选择的选项;不是说它不好,而是感觉不自然。 (当然它仍在 MS 研究中。)

你怎么看?

【问题讨论】:

  • 好吧,CuttingEdge.Conditions 你也需要安装东西。
  • 你需要在项目中添加一个库而不是整个 VS 的 msi
  • 在这两种情况下,您都在项目中添加对第 3 方 dll 的引用。

标签: c# code-contracts


【解决方案1】:

编辑:我建议人们使用https://github.com/adamralph/liteguard

CuttingEdge.Conditions 已被分叉为只是条件。原作者不再维护也不再使用该项目:https://conditions.codeplex.com/workitem/20064

CodeContracts 没有在 Mono 中实现。有一个 GSOC 项目,但最终没有得到完整的解决方案,因此如果针对 Xamarin.iOS/Xamarin.Android/Xamarin.Mac 平台或一般只是单声道,条件是您的唯一选择。

该库现在是一个可移植的类库,默认情况下跨平台支持在:

https://github.com/ghuntley/Conditionshttps://www.nuget.org/packages/Conditions/

【讨论】:

    【解决方案2】:

    主要区别在于 Code Contracts 包含一个静态检查器。这意味着将在编译时检查您的合约是否正确。

    此外,只要您为 .NET 4 构建,您的用户就不需要安装任何东西。重写器在编译时工作,CC 的其余部分是 .NET 的一部分。

    【讨论】:

    • 哇 - “现在只有一个版本适用于 Visual Studio 的每个版本(Express 除外)并且包括静态检查器!”所以它不再是 Ultimate-only 的功能! :)
    • 你确定吗,据我所知,为了使Contract 工作(插入 IL),你仍然需要安装 msi 并设置重写器?
    • @guyl:是的,但只有构建代码的机器需要安装它。重写 DLL 后,您可以在任何没有代码合同的机器上运行它们。
    【解决方案3】:

    CodeContracts 框架是 .NET 4 的一部分。因此您可以针对它编写代码而无需安装任何东西,只是没有重写器组件,代码协定在运行时不会产生任何影响。我将这一包含在框架中视为微软打算在未来更多地集成代码合约的标志。

    根据CuttingEdge.Conditions CodePlex page 上的统计数据,它仅被下载了 4,189 次。语法有一些不错的地方,但除非 CuttingEdge.Conditions 而非 CodeContracts 专门支持某些东西,否则您最好坚持使用 .NET 的一部分。

    在我看来,代码合约的主要特点如下:

    1. 您可以在接口上设置代码协定,以指定实现这些接口的类型的预期行为。

    2. 代码契约被继承。

    我没有尝试过CuttingEdge.Conditions,但它支持这两个功能并不明显(而CodeContracts 支持)。

    【讨论】:

      猜你喜欢
      • 2013-01-27
      • 2011-07-25
      • 1970-01-01
      • 2012-11-11
      • 1970-01-01
      • 2012-08-05
      • 2015-02-04
      • 2010-09-17
      • 1970-01-01
      相关资源
      最近更新 更多