关于Juval Lowy和#x27的问题;s IDesign C#编码标准
我们正在尝试使用。不幸的是,我没有找到全面的文件来解释它给出的所有规则,而且他的书也不总是有用的 以下是留给我的开放性问题(来自第2章,编码实践):关于Juval Lowy和#x27的问题;s IDesign C#编码标准,c#,.net,coding-style,standards,C#,.net,Coding Style,Standards,我们正在尝试使用。不幸的是,我没有找到全面的文件来解释它给出的所有规则,而且他的书也不总是有用的 以下是留给我的开放性问题(来自第2章,编码实践): 第26条:避免为枚举提供显式值,除非它们是2的整数幂 第34条:始终使用for循环显式初始化引用类型数组 第50条:避免将事件作为接口成员 第52条:公开类层次结构上的接口 第73条:不要在接口中定义特定于方法的约束 第74条:不要在代理中定义约束 以下是我对这些问题的看法: 我认为在以后添加新的enum成员时,提供显式值会特别有用。如果这些成员是
第26条:二次幂表示您希望将枚举用作位掩码(标志)。这是指定枚举值的唯一原因。对于以后添加新成员,您仍然可以将它们附加到枚举定义中,而无需更改现有值。没有理由把它们放在现有成员之间 第34条:我认为他希望避免出现数组包含(部分)未初始化指针(空引用)的情况。作为阵列的消费者,它很诱人
不要检查有效数组变量中的空条目。第26条:他完全错了,至少对于公共枚举是这样。当您删除一个项目时,而不是添加一个项目时,问题就会出现(对于该项目,添加到列表末尾将等同于添加具有下一个可用值的项目)
至于其他人,我真的不知道他为什么要提出这些建议,尽管我不得不承认,我发现其中一些(或可能大部分)建议相当可疑……好吧,所以我基本上会插手我在stackoverflow上的小代表:你们都可以杀了我,因为我开始了一场宗教辩论
使用Juval的代码标准的提示实际上在其前言中: “我相信,虽然完全理解某个特定编程决策中的每一个细节可能需要阅读书籍,甚至需要多年的经验,但应用标准不应该如此。” 下一个提示是阅读他的作品。 下一步就是按照他的建议去做。 也许在路上你会明白为什么他被公认为“微软软件传奇”。 接下来可能是以只读pdf格式交付
你不满意吗? 这里的关键是认识到这不是一个宗教叙事,而是一个务实的叙事 我个人对他的标准的体验大致如下: 如果你尽可能地遵循这些建议,你会得到一个有成效的结果。 您对重构的需求将更少,您在项目的后期周期中的生产率将更高 这是基于经验的评估 基本上,您要寻找的是编码标准中某些部分的“为什么”答案,特别是这些部分:26、34、50、52、73、74 您是从务实的角度提出这些问题的:您希望纳入该标准,并且您“不知何故”知道,从长远来看,这将给您带来好处 通过研究这些规则,通过经验,你也许会理解为什么它们确实存在。这里的经验是根据这些原则执行和不执行代码。 但这并不是重点。关键是,通过基于深思熟虑、成熟和可靠的标准进行工作,您的工作现在成为高质量的工作
关于如何遵循标准 真正把这些规则理解为建议,它们的措辞已经非常严格:“避免、不要、做等等”实际上就是它们所说的。回避意味着“在打破原则之前认真思考”。“不”的真正意思是“不” Juval完全是关于解耦的,他的大多数难以理解的建议实际上来自于不考虑代码设计中的“分离” 有时候,对于一个在抽象程度较低或面向特性的环境中工作的团队来说,这是很难做到的,因此,有时您会发现有必要打破规则,“让团队行动起来”,但如果可以的话,您确实应该将其重构为标准 几年后,再经过几个项目,您可能会理解简单指南中每一条规则的基本原理。如果你是一个聪明的学生。我,我不是那么聪明,所以我基于经验:代码中非标准化部分的东西在集成测试期间经常失败。这通常很难恢复。它通常与环境关系不好等等 这确实是一个信任的问题。如果你不能相信这个标准(而不是采用它——相信它),我将向你建议,你将发现很难真正编写出一个通俗易懂的c代码