我的团队正在开发一个转换项目,将一个产品(但有很多方面)从VB6转换为.Net(我们有超过~300k的LOC)。在我加入之前,决定无论程序集的位置或文件夹结构如何,所有类/结构都将位于一个名称空间中:
他们甚至可以更改自动生成的应用程序设置设计器代码,资源设计器代码等,以强制统一。我如何说服他们命名空间使用是好的?命名空间的正确用法是什么,有哪些优点和缺点?我想我很难理解为什么我的同事会经历如此多的麻烦来节省一些使用线路。任何外部的,有信誉的参考支持您的论点将非常感激。请帮忙!
答案 0 :(得分:7)
答案 1 :(得分:5)
正确使用命名空间是为了提供逻辑分组的类,接口,枚举等的有序结构。这就像将所有文件放在一个文件夹中......或者更糟糕的是,将它们全部放在C:驱动器的根目录中...
我要指出你的球队非常短视,这不是我开始质疑其他球队政策和程序的地方 - 但如果我在你的位置,我会坚持使用我的枪支。 / p>
答案 2 :(得分:3)
希望您的团队理解面向对象的设计原则。您将相关信息分组到具有处理该信息的操作的类中。命名空间是(或应该)类似的。您可以使用命名空间将相关类组合在一起,并一起提供操作以处理命名空间的集合信息。
这有助于代码清晰度。将数据层类分组到单个命名空间中将它们标识为相关,并以提供命名空间指示的功能的方式相关[另外,这就是为什么您需要为命名空间和类提供有意义的名称的原因]。如果你将所有类组合在同一个命名空间中,那么这一切都变得很糟糕。您已经丢失了代码组织的语义线索,并且必须深入研究它以找出哪些类一起工作以提供所需的功能。
重点是:这不仅仅是个人偏好的问题。就像你不能指望将所有句子都倾注到一个段落中一样,而是必须将它们组织成几个段落,其中句子是相关的;你需要把你的类和它们组织成命名空间。将您的写作分解为相关句子的段落提供了清晰度和含义,将您的类分解为命名空间可以提高代码的清晰度。随着课程数量的增加,这变得越来越重要。
答案 3 :(得分:2)
虽然你绝对正确的命名空间是好的,健康的和完全必要的,但听起来已经付出了相当大的努力来建立团队的现状。我认为你有机会出售这个想法的唯一方法是:
在没有名称空间(可维护性,调试等)的成本上设置硬编号,并获得执行管理。
志愿创建命名空间约定并完成所有工作以转换项目。
不幸的是,根据我的经验,一旦建立了像命名空间约定这样普遍存在的东西,就需要国会的行为来改变它。
答案 4 :(得分:2)
许多人都指出了代码易读性和组织性。
将类似命名的类分离到不同的“空格”中,如Network.Session,Meeting.Session,WebServer.Session等。在现实世界中,有许多对象具有相同或相似的名称。这就是为什么名字需要他们自己的空间来限定他们。命名空间还可以在正确使用时简化程序集的命名,例如 System.Web.DLL 和 System.Messaging.DLL 。这有助于代码重用,因为您可以根据需要将代码分成较小的功能块(DLL),而不包括整个巨型质量(或混乱)。
命名空间是将不同项目,目的和类别的代码分开的边界。在大型项目中,许多DLL文件被共享和重用,程序员需要一种易于记忆的方法来引用正确的类,并避免引用错误的类。如果微软决定将所有.NET类放入一个单独的“System”命名空间,可以想象无法解决的疯狂吗?任何程序员如何开始编写代码来调用这些类?此外,您需要处理名为 WindowsFormsTextBox 和 WebUIWebControlsTextBox 的类或更长的类。拥有适当的命名空间有助于程序员快速安全地编写代码。
命名空间的好处在大型项目中变得更加明显,或者当小型项目逐渐变得足够大而成为问题时。您可以查看当前项目的大小,并确定您需要多大程度地扭曲同事的手臂。
答案 5 :(得分:1)
对某些人来说,没有多少逻辑话语会像物理类比一样令人信服。
所以,有一天,每个人都在吃午饭,把他们所有的书从办公室和书柜中拿出来,然后把它们堆放在会议室桌子上。请务必将计算机书籍与漫画漫画和月份MSDN杂志等彻底混淆。
告诉他们这是具有一个命名空间的物理表示 - 会议桌是命名空间,书籍是模块/类/项目。
然后让他们找到关于遗传算法的书。 (确保你把它隐藏在堆的底部)。
如果他们仍然没有得到它,请放弃并开始寻找另一份工作。你不想和那些厚厚的人一起工作! ; - )
答案 6 :(得分:0)
如果您的代码是洗衣店,您可以选择两种方式,或者您可以将所有东西放在一个大堆中,每次需要时都可以穿过它,或者您可以将衣服放在一个局内。
答案 7 :(得分:0)
如果我有一个设计良好的命名空间方案,代码文件顶部的using / Imports语句会记录我在此文件中使用的内容。
答案 8 :(得分:0)
如果你必须说服他们分区命名空间而不仅仅是“The One True Namespace”是一个好的,令人向往的东西,那么这似乎表明你可能无法说服他们。说实话。
答案 9 :(得分:0)
如果开发人员对VB6以及现有VB6项目的结构感到满意,那么将移植项目的结构与原始项目结合起来可能是有意义的,即使它会破坏.net中的一些最佳实践。 (我假设VB6不支持名称空间?)名称空间可以在以后新代码库稳定并且开发人员使用.net时更加舒适时引入。
答案 10 :(得分:0)
他们认为命名空间的用途是什么?他们为什么认为BCL使用它们?