C# 实施和执行编码标准

C# 实施和执行编码标准,c#,standards,coding-style,C#,Standards,Coding Style,我的团队(我是其中最新也是最年轻的成员)在大约一年的时间里从3名开发人员增加到了9名开发人员。我们的主要产品的复杂性有所增加,我们即将对Silverlight进行为期一年的端口/重新写入。过去没有强制执行特定的样式/标准 我向老板建议,现在是实施这些标准的好时机。我把文件传给他,他喜欢这个主意。他有两个顾虑 这是一份需要吸收的大文件。我的想法是为我们可能遇到的最常见的项目制定一份精简的备忘单,并理解IDesign标准是“主”标准,精简版本中未包含的任何内容都应在“主”文档中查找 实施这一点的最佳

我的团队(我是其中最新也是最年轻的成员)在大约一年的时间里从3名开发人员增加到了9名开发人员。我们的主要产品的复杂性有所增加,我们即将对Silverlight进行为期一年的端口/重新写入。过去没有强制执行特定的样式/标准

我向老板建议,现在是实施这些标准的好时机。我把文件传给他,他喜欢这个主意。他有两个顾虑

  • 这是一份需要吸收的大文件。我的想法是为我们可能遇到的最常见的项目制定一份精简的备忘单,并理解IDesign标准是“主”标准,精简版本中未包含的任何内容都应在“主”文档中查找

  • 实施这一点的最佳方式是什么。这不是试图发号施令的问题;这是一个让人们习惯于按照特定标准发展的问题。团队中至少有两个人已经发展到目前的非标准状态好几年了。为了解决这个问题,我想看看是否有一个工具可以配置为强制执行这些标准,或者至少在编译时或设计时警告“违反”标准。我找到了微软的StyleCop,但据我所知,它是不可配置的,并且是按照微软的标准设置的,而微软的标准与IDesign的标准并不完全一致


  • 如果您对我正在研究的工具或方法有任何意见,我们将不胜感激。

    试试ReSharper,它可以根据您的风格格式化您的代码。甚至可以立即重新格式化整个解决方案。

    定期检查代码将是一个很好的方法

    我发现开发人员对特定标准的面对面讨论做出更好的响应,而不仅仅是将其留给工具


    将工具与代码检查结合使用应该是很好的。

    StyleCop将是一个很大的帮助。

    如果您的团队有一个连续构建(例如使用),您可以通过构建失败或在有人提交违反样式指导原则的更改时使其不稳定来强制样式约束。Hudson有一个插件,可以与Checkstyle和StyleCop等工具一起使用。

    谢谢大家的建议。我想多听听。碰巧的是,当我按照建议研究Resharper时,我碰巧重新下载了IDesign标准,它是一个zip文件,其中有一个链接。好的方面是它默认为我想要使用的标准。它很便宜(如果你不捐赠,可以免费阅读),而且我很喜欢它,所以我已经加载了DXCore

    在不知道您的配置管理设置是什么样子的情况下,我认为您应该首先寻找与版本控制系统集成的工具,这些工具在代码提交到存储库之前对代码进行评估。我已经用我们的SVN设置完成了这项工作,也看到了用CVS完成了这项工作……它在一定程度上是有效的,因为它迫使开发人员提交“正确”的代码,并保持您的存储库整洁。一个简单的例子是,如果用户没有在提交消息中提供特定信息(例如,bug#、项目任务等),则拒绝提交


    撇开工具不谈,您必须找到一种方法来向开发人员描述编码标准的价值。听起来很简单,但这是迄今为止我最难做到的部分。向开发人员展示,在维护代码库方面,一点点努力可以大有帮助

    我认为,ReSharper、FxCop/StyleCop(至少有一种方法可以为FxCop定义自定义规则)、清晰的代码指南和每月审查的组合应该可以为一个9人的团队完成这项工作。如果有人违反了规则,你将不得不使用鞭子:)

    很难夸大编码标准的重要性。关键是您应该有一个一致的代码库,每个人都可以快速阅读和理解。选择哪一套标准并不重要(只要每个人都注册),但如果选择一套广泛使用的标准,那么需要调整风格的开发人员就更少了。这些是我最喜欢的(而且非常友好)


    我的一位同事()和他的开源团队正在开发一个优秀的工具,它通过在您键入时突出显示它们来实时显示样式冲突!有一个非常值得推荐的方法。

    我刚刚写了一篇博客,介绍了如何同时使用ReSharper和StyleCop,并通过持续集成(使用NAnt)来实现它

    看看你怎么看。这对我们很有效。目前有一些抱怨说,如果引入了一个代码冲突,我的构建就会失败。我们确实有数以万计的违规行为(大部分是旧的遗留代码),所以我的反应是清理其中一个,这就是代码应该变得更好而不是更糟

    有一次我收到回复,希特勒的夜间建造失败了:

    在我们公司,我们使用C#的参考卡。参考卡在Powerpoint中使用两张幻灯片制作。前滑和后滑(2页打印)。每张幻灯片有3列(报纸设置)。在每根柱子之间制作1厘米的白色以实现折叠

    将公司完整编码指南的最重要方面放在两张幻灯片中(例如:编码风格、名称空间和解决方案结构、命名约定)

    您选择了IDesign的开箱即用编码准则。也许你更容易掌握MS编码风格,但那是你的选择。大多数开发人员都熟悉MS指南,因此更容易掌握。

    找到比这短得多的东西。开发人员需要记住的事情太多了,期望他们记住的规则超过一页是浪费时间的。即使你给了他们一份备忘单,除非那是官方的,也是唯一的文件,你最终还是会遇到开发人员,他们发明了自己的
    public bool compare (Object other){
      if(other == null) throw new NullPointerException("You twit, don't give me a null pointer");
      if(!(other instanceof CustomerObject)) throw new UnsupportedArgumentException("Give me the right argument, dammit");
      ...