卓越的命名

2021-06-26 17:33:35

软件开发中最困难的事情是命名。命名产品,范式和代码的部分。命名的原因是艰难而重要的是,它是一种沟通行为;没有好的名字,你的代码也可以写入,嗯,代码。一个名称不仅仅是标签:它通知并指导读者的心理模型。名称可以改变读者思考的方式。一个好名字是一分享思想;一个糟糕的名字是一个错过的学习机会,说出我们的意思。

我们十年采用公约来制定命名的某些方面更容易。这样的一致性可能是一件好事,但并非所有一致的实践都必然好。具有常见的概念词汇是有用的,但命名的概念应该有资格作为有用的信息 - 一致的噪声只是噪声。

顺势疗法命名是一个最常见的习惯程序,程序员可以崩溃而没有意识到:通过添加更多单词来制作名称,其中包括添加更多含义的代码,但在练习与每个工厂/管理器/对象/控制器/值稀释含义时服务/ ...添加。稀释的东西稀释它们;它不会让他们更有效。将lego-brick零件粘贴到标识符不会放大或增强其含义,并且通常突出显示在第一位置可能几乎没有意义。不应使用命名约定来支撑弱小的名字。如果一个名字没有很好地沟通,我们需要清楚地看待它,所以我们可以解决它而不是窒息它,隐藏在乐高的墙上。

两个顺势疗法命名仪式仪式.NET和Java Worlds都是将后缀异常添加到类中以表示其实例是异常的。这种兴趣印记于开发商不知道他们已经获得了习惯 - 从他们的环境中吸收了未经审查和不变的工厂设置。

这些语言的例外是特权和突出的,这意味着基于它们的上下文,类和对象,这些类和对象是明显的,并且与不是的类和对象不同。它们具有专用的权利,可以在代码中的特定和编译器强制上出现:在掷漏,在Java的捕获情况下,在抛出列表中(但看出您是否可以避免此问题)。根据定义,这些地方出现的事情只能是例外 - 编译器知道他们必须是例外,读者也是如此,所以没有什么可以添加。

在本书的第一版中,我们做了一个糟糕的工作,解释我们的意思不要重复自己。许多人认为它仅参考代码:他们认为干燥的手段“不要复制来源的源码。”。

这是干燥的一部分,但它是一个小部分和相当琐碎的部分。

干燥适用于名称,语言构造和元数据,就像它适用于代码重复,文档和手动重复自动进程一样多。

如果您的编程语言表示具有摘要等关键字的抽象类,请不要在名称中放置摘要或通过告诉读者通过命名IT基础作为基类来重复自己。如果一个类是一个具体的类,那么根据定义,它是一个实现类,所以不要通过将icligh中的名称置于自己来重复自己。如果您的编译器和IDE可以从字符串中讲述整数,请不要通过在变量名称中编码该细节来重复自己,如曾经受欢迎的匈牙利加密方案所推广的。如果您的测试框架您将使用测试注释,属性或宏标记您的测试 - 并且您的测试出现在类中,文件或文件夹中名为test - 不要通过在测试名称中包含测试来重复自己。使用名称的带宽来告诉他们需要知道的读者事物而不是重复已知的内容。使用带宽进行信号而不是噪声 - 并使用更少的带宽。

我们明白,一个类及其实例代表了他们的语法位置的例外,但这不是唯一的线索。阶级代表异常,也应该通过其父母或其名称来显而易见。这个名字应该代表任何问题,并且应该直接,具体地这样做。要将异常添加到末尾是冗余的 - 所以删除它 - 或指示较差的名称 - 因此重命名它。

这些名称简明扼要。即使没有看到他们的使用背景,那么几乎没有质疑这些是坏消息的承载。 .NET异常使用类似负阴性的措辞,以及与无效和坏的其他不祥词。有很少的误解余地。

嗯,不太清楚。但是丢弃异常后缀的问题是什么?还是通过掉落它揭示了一个问题?让我们尝试将这些课程重命名为他们实际信号的问题:

这些修订的名称既准确又精确,指示异常的实际情况而不模糊或诉诸噪音。安全地是一个例外吗?不,但安全违规是。例外涉及安全性,但名称错过了具体的机会。同样,NumberFormat不是问题,而是尝试使用具有InvalidNumberFormat的字符串。

是值得的,指针(umm,引用)为null?不,在具有可以设置为null的引用的语言中,null是可接受的值。发信号通知的问题是NULL已在JVM中取消引用,例如通过NULL引用调用方法,或者已将NULL传递给将NULL作为参数所无效的代码传递给代码。无论哪种方式,null都是意外的。

更具体地对名称也有助于突出显示歧义和模糊性,就像在这种情况下:Java练习就无法在语言信号错误的错误之间明确区分,例如取消引用空缺和代码信号错误,例如拒绝Null Argument作为非法的。在.NET中,以前的案例使用nullReferenceException(即,nulldeReference)和后者使用ArgumentNulLException(即,InvalidNullargument),这是ArgumentException(即,InvalidArgument)。关于Java代码是否被写入抛出nullpointerexception或IllegalArgumentException在很大程度上依赖于码字,团队,个人,月球阶段等。

正如您在写入或说话的时候没有用动词或名词标记动词或名词的动词一样,很少有原因 - 以及许多原因不 - 在异常类名称结束时解决异常。它可以被视为一种代码闻名而不是遵循的做法,通常剥夺程序员有机会找到更好的名字。

这方面可能的例外情况?指示其后代的一般类是例外:例外。但是,然后,这不是一个后缀:这是它的整个名字和它代表的概念,所以除了异常命名时几乎没有例外。