Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于Juval Lowy和#x27的问题;s IDesign C#编码标准_C#_.net_Coding Style_Standards - Fatal编程技术网

关于Juval Lowy和#x27的问题;s IDesign C#编码标准

关于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成员时,提供显式值会特别有用。如果这些成员是

我们正在尝试使用。不幸的是,我没有找到全面的文件来解释它给出的所有规则,而且他的书也不总是有用的

以下是留给我的开放性问题(来自第2章,编码实践):

  • 第26条:避免为枚举提供显式值,除非它们是2的整数幂
  • 第34条:始终使用for循环显式初始化引用类型数组
  • 第50条:避免将事件作为接口成员
  • 第52条:公开类层次结构上的接口
  • 第73条:不要在接口中定义特定于方法的约束
  • 第74条:不要在代理中定义约束
  • 以下是我对这些问题的看法:

  • 我认为在以后添加新的enum成员时,提供显式值会特别有用。如果这些成员是在其他现有成员之间添加的,我将提供显式值以确保现有成员的整数表示形式不会更改
  • 不知道我为什么要这么做。我想说这完全取决于我程序的逻辑
  • 我看到有提供“Sink接口”的替代选项(只需提供已经存在的所有“onxxxhapped”方法),但是为什么选择其中一个而不是另一个呢
  • 不确定他在这里意味着什么:这是否意味着“当在一个非密封类中显式实现接口时,考虑在可保护的虚拟方法中提供可重写的实现”吗?(参见编程.NET组件第二版“接口和类层次结构”一章末尾)
  • 我想这是关于在使用泛型时提供一个“where”子句,但是为什么在接口上这样不好呢
  • 我想这是关于在使用泛型时提供一个“where”子句的,但是为什么在委托中这样不好呢

  • 第26条:二次幂表示您希望将枚举用作位掩码(标志)。这是指定枚举值的唯一原因。对于以后添加新成员,您仍然可以将它们附加到枚举定义中,而无需更改现有值。没有理由把它们放在现有成员之间

    第34条:我认为他希望避免出现数组包含(部分)未初始化指针(空引用)的情况。作为阵列的消费者,它很诱人
    不要检查有效数组变量中的空条目。

    第26条:他完全错了,至少对于公共枚举是这样。当您删除一个项目时,而不是添加一个项目时,问题就会出现(对于该项目,添加到列表末尾将等同于添加具有下一个可用值的项目)


    至于其他人,我真的不知道他为什么要提出这些建议,尽管我不得不承认,我发现其中一些(或可能大部分)建议相当可疑……

    好吧,所以我基本上会插手我在stackoverflow上的小代表:你们都可以杀了我,因为我开始了一场宗教辩论


    使用Juval的代码标准的提示实际上在其前言中:

    “我相信,虽然完全理解某个特定编程决策中的每一个细节可能需要阅读书籍,甚至需要多年的经验,但应用标准不应该如此。”

    下一个提示是阅读他的作品。 下一步就是按照他的建议去做。 也许在路上你会明白为什么他被公认为“微软软件传奇”。 接下来可能是以只读pdf格式交付


    你不满意吗? 这里的关键是认识到这不是一个宗教叙事,而是一个务实的叙事

    我个人对他的标准的体验大致如下: 如果你尽可能地遵循这些建议,你会得到一个有成效的结果。 您对重构的需求将更少,您在项目的后期周期中的生产率将更高

    这是基于经验的评估

    基本上,您要寻找的是编码标准中某些部分的“为什么”答案,特别是这些部分:26、34、50、52、73、74

    您是从务实的角度提出这些问题的:您希望纳入该标准,并且您“不知何故”知道,从长远来看,这将给您带来好处

    通过研究这些规则,通过经验,你也许会理解为什么它们确实存在。这里的经验是根据这些原则执行和不执行代码。 但这并不是重点。关键是,通过基于深思熟虑、成熟和可靠的标准进行工作,您的工作现在成为高质量的工作


    关于如何遵循标准 真正把这些规则理解为建议,它们的措辞已经非常严格:“避免、不要、做等等”实际上就是它们所说的。回避意味着“在打破原则之前认真思考”。“不”的真正意思是“不”

    Juval完全是关于解耦的,他的大多数难以理解的建议实际上来自于不考虑代码设计中的“分离”

    有时候,对于一个在抽象程度较低或面向特性的环境中工作的团队来说,这是很难做到的,因此,有时您会发现有必要打破规则,“让团队行动起来”,但如果可以的话,您确实应该将其重构为标准

    几年后,再经过几个项目,您可能会理解简单指南中每一条规则的基本原理。如果你是一个聪明的学生。我,我不是那么聪明,所以我基于经验:代码中非标准化部分的东西在集成测试期间经常失败。这通常很难恢复。它通常与环境关系不好等等

    这确实是一个信任的问题。如果你不能相信这个标准(而不是采用它——相信它),我将向你建议,你将发现很难真正编写出一个通俗易懂的c代码