更广泛的问题:
您听说过这样的标准吗?如果是这样,其背后的原因是什么?
是的,我听说过,使用完全限定的对象名称可以防止名称冲突。尽管很罕见,但是当它们发生时,要弄清楚它们可能会非常棘手。
一个例子:
用一个例子可以更好地解释这种情况。
假设我们有两个Lists<T>
属于两个不同的项目。
System.Collections.Generic.List<T>
MyCorp.CustomCollections.Optimized.List<T>
当我们使用完全限定的对象名称时,很清楚List<T>
要使用哪个名称。这种清晰性显然是以冗长为代价的。
您可能会争论:“等等!没有人会使用两个这样的列表!” 我将在其中指出维护方案。
您是Foo
为公司编写的模块,它使用经过批准和优化的公司List<T>
。
using MyCorp.CustomCollections.Optimized;
public class Foo {
List<object> myList = ...;
}
后来,新的开发人员决定扩展您一直在做的工作。在不了解公司标准的情况下,他们更新了该功能using
块:
using MyCorp.CustomCollections.Optimized;
using System.Collections.Generic;
您会很快发现情况变糟了。
应当指出,您可以在同一个项目中拥有两个具有相同名称但在不同名称空间中的专有类。因此,不仅仅是与.NET Framework提供的类冲突的关注。
MyCorp.WeightsAndLengths.Measurement();
MyCorp.TimeAndSpace.Measurement();
现实:
现在,这可能会在大多数项目中发生吗?不,不是。但是,当您在一个具有大量输入的大型项目中工作时,您将尽最大努力将发生爆炸的可能性降到最低。
具有多个贡献团队的大型项目是应用程序世界中的一种特殊野兽。由于项目的输入流以及做出贡献的人可能没有阅读项目指南的可能性,对于其他项目而言似乎不合理的规则变得更加相关。
当两个大型项目合并在一起时,也会发生这种情况。如果两个项目都具有类似命名的类,那么当您开始从一个项目引用到另一个项目时,就会看到冲突。这些项目可能太大而无法重构,否则管理层不会批准用于资助重构时间的费用。
替代方案:
尽管您没有要求,但值得指出的是,这不是一个很好的解决方案问题。创建将在没有名称空间声明的情况下发生冲突的类不是一个好主意。
List<T>
,尤其应被视为保留字,而不应用作类的名称。
同样,项目中的各个名称空间应努力具有唯一的类名。不得不尝试回想Foo()
您正在使用哪个名称空间是最好的避免方法。换句话说:拥有MyCorp.Bar.Foo()
和MyCorp.Baz.Foo()
会让您的开发人员绊倒,最好避免。
如果没有其他问题,则可以使用部分名称空间来解决歧义。例如,如果您绝对不能重命名任何一个Foo()
类,则可以使用其部分名称空间:
Bar.Foo()
Baz.Foo()
您当前项目的特定原因:
您使用符合该标准的当前项目的具体原因更新了问题。让我们看一下它们,然后沿着兔子小路走开。
将鼠标悬停在名称上以获得完全限定的类型很麻烦。最好始终始终显示完全合格的类型。
“笨拙?” 不。也许烦人。移动几盎司的塑料以移动屏幕上的指针并不麻烦。但是我离题了。
这种推理方式似乎更像是掩盖。随便说一句,我猜应用程序中的类都是弱命名的,您必须依赖命名空间才能收集围绕类名的适当数量的语义信息。
这不是完全合格的类名的有效证明,也许这是使用部分合格的类名的有效证明。
电子邮件代码段没有完全限定的名称,因此可能很难理解。
这种(续?)推理路线使我更加怀疑当前类的命名不正确。同样,使用不良的类名并不是要求所有内容都使用完全限定的类名的充分理由。如果类名难以理解,那么比完全限定的类名可以解决的错误要多得多。
在Visual Studio(例如Notepad ++)之外查看或编辑代码时,不可能获得完全限定的类型名称。
出于所有原因,这几乎使我吐出了酒。但是我又离题了。
我不知道为什么团队经常在Visual Studio之外编辑或查看代码?现在,我们正在寻找一种与名称空间要提供的东西完全正交的理由。这是工具支持的参数,而名称空间则可以为代码提供组织结构。
听起来您自己的项目遭受了不良的命名约定,而开发人员却没有充分利用工具为他们提供的功能。他们没有解决这些实际问题,而是试图对症状之一打个创可贴,并要求使用完全合格的班级名称。我认为将其归类为误导方法是安全的。
鉴于存在命名不佳的类,并且假设您无法进行重构,正确的答案是使用Visual Studio IDE来发挥其全部优势。可能考虑添加VS PowerTools软件包之类的插件。然后,当我查看时AtrociouslyNamedClass()
,可以单击类名,按F12键,然后直接转到类的定义,以便更好地了解它的作用。同样,我可以单击Shift-F12来找到当前不得不使用的代码中的所有斑点AtrociouslyNamedClass()
。
关于外部工具问题-最好的办法就是停止它。如果片段没有立即清除所指内容,则不要来回发送电子邮件。不要在Visual Studio之外使用其他工具,因为这些工具没有团队所需的智能。Notepad ++是一个了不起的工具,但并非可用于此任务。
因此,我同意您对提出的三个具体理由的评估。就是说,我想你被告知的是“该项目存在一些无法/无法解决的根本问题,而这就是我们'解决'这些问题的方式。” 这显然说明了团队内部更深层次的问题,可能会给您带来危险。