有没有关于制定C#编码标准/最佳实践文档的建议?

159

我是一名近期毕业的AI专业研究生(大约2年),在一家规模适中的公司工作。由于我是部门内第一个采用新技术的人,所有基础(可读性高?)C#编码标准文件的制作任务落到了我的手上。

我想我应该解释一下,我可能是最初级的软件工程师,但我很期待这个任务,因为希望我能够真正做出一些有用的东西。我已经在互联网上进行了相当广泛的搜索,并阅读了有关编码标准文件应该 / 不应该包含什么的文章。这似乎是任何地方都可以寻求建议的好地方。

我意识到我可能正在打开一个关于“最佳操作方法”的争论之门。我既理解又尊重每位程序员都有其喜好的事实,也因此不会写任何过于严格规定的文件来限制个人风格,而是尝试获得一般方法和商定的标准(例如命名规则),以帮助使个人的代码更易读。

那么开始吧...有什么建议吗?无论如何?

26个回答

139

32

26

具有讽刺意味的是,设定实际标准可能是相对容易的。

我首先建议从其他工程师那里征求意见,了解他们认为应该包括哪些内容以及他们认为重要的指南。强制执行任何类型的准则都需要人们的支持。如果你突然给他们一个规定如何编写代码的文件,无论你是最初级的还是最资深的人,都会遭到抵抗。

在提出了一系列提案后,将它们发送给团队进行反馈和审查。再次获得所有人的支持。

已经存在非正式的编码惯例(例如前缀成员变量、驼峰命名法),如果这种惯例存在,并且大多数代码符合它,那么正式化它的使用是值得的。采用相反的标准会带来比它所值得的更多的麻烦,即使它是普遍推荐的。

考虑重构现有代码以符合新的编码标准也很值得。这看起来可能是浪费时间,但是不符合标准的代码可能会起到反作用,因为您将拥有各种风格的大杂烩代码。它也会让人陷入困境,是否应该让某个模块中的代码符合新的标准或者遵循现有代码风格。


14

在制定编码标准和最佳实践方面,我一直使用Juval Lowy的pdf作为参考。这个标准非常接近于FxCop/Source Analysis,这是另一个宝贵的工具,可以确保遵循标准。通过使用这些工具和参考资料,您应该能够制定出一个漂亮的标准,所有开发人员都不会介意遵循,并且能够强制执行。


9
其他海报已经指向了基线,我只想补充的是让你的文档简短、简洁、重点突出,采用大量的 Strunk 和 White 来区分“必须拥有”的内容和“如果有就好”的内容。
编码标准文件的问题在于,没有人真正像他们应该那样阅读它们,而当他们阅读它们时,他们不遵循它们。这种文件被阅读和遵循的可能性与其长度成反比。
我同意 FxCop 是一个好工具,但太多这样的工具会把所有的乐趣都剥夺掉,所以要小心。

9
永远不要编写自己的编码标准,使用微软的(或Sun的,或...适用于您的语言)。提示在“标准”一词中,如果每个组织都没有决定编写自己的标准,那么编码的世界将会变得更加简单。谁真的认为每次更改团队/项目/角色时学习新的“标准”集合是任何人的好用时间。
你所能做的最多的就是总结关键点,但我建议甚至不要这样做,因为什么是关键因人而异。
我想对编码规范提出另外两点意见:
  1. 接近即可 - 按照编码标准修改代码毫无意义,只要代码足够接近即可。
  2. 如果您正在更改未编写的代码,则遵循“本地编码标准”,即使您的新代码看起来像周围的代码。

这两点是我的愿望的现实,即每个人都编写相同的代码。


8
我发现以下文档非常有帮助和简明。它来自idesign.net网站,作者是Juval Lowy。 C#编码规范 注:上面的链接现在已失效。要获取.zip文件,您需要提供电子邮件地址(但他们不会用于营销...真的)。请尝试这里

5
我会将Code Complete 2添加到列表中(我知道Jeff在这里有点粉丝)......如果你是初级开发人员,那么这本书对于建立思维方式以及奠定最佳代码编写实践和软件构建的基础非常有用。
我必须承认我的职业生涯中有段时间才开始接触它,但它主导了我在专业生活中关于编码和框架开发的许多思考方式。
值得一看 ;)

2
我正要建议同一本书。必读之作。 - Pascal Paradis
我正在阅读这本书,已经读了67%以上。它改变了我对编程的看法。必读之作。 - UrsulRosu

5

我刚刚开始在一个要求使用m_表示成员变量,p_表示参数以及类型前缀的编码标准中工作。例如,字符串类型可以用'str'表示。

因此,在方法体中可能会出现这样的代码:

m_strName = p_strName;

很糟糕。真的很糟糕。


1
在Visual Studio 2010中的智能感知功能可以让你输入“Name”,并匹配p_strName中的子字符串——当你被使用这种可怕的东西时,它可以让你少受10%的痛苦。:o - Sam Harwell

4

2
你可能不会完全同意StyleCop所强制执行的所有内容,但请考虑到微软正在朝着由StyleCop强制执行的单一标准迈进 - 因此这是一组标准,你可以期望其他开发人员熟悉。与行业中的大部分保持一致可能非常有价值。 - Bevan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接