命名约定和命名空间

时间:2009-04-16 20:22:10

标签: c# naming-conventions

如果我在一个图层上有与另一个图层上的对象同名的对象,最好是用一些前缀更改对象名称还是使用新的命名空间并用完全限定的名称引用它们?例如:

namespace Project1.Data
Object Person;

namespace Project1.Model
Object Person;

Data.Person.Name=Person.Name;

OR

dbPerson.Name= Person.Name;

5 个答案:

答案 0 :(得分:12)

我使用名称空间和名称空间别名,例如:

在适当的命名空间中定义类:

namespace Project1.Data
{
    public class Person {...}
}
namespace Project1.Model
{
    public class Person {...}
}

在使用类的地方,要么使用完全限定名称,要么为命名空间定义别名(如果完整命名空间很长,则使用usefule):

using data = Project1.Data;
using model = Project1.Model;

data.Person p1 = new data.Person();
model.Person p2 = new model.Person();
//...
p1.Name = p2.Name;

答案 1 :(得分:2)

这取决于您引用重载名称的频率。

如果您在一个文件中多次使用它,请使用第一种方式。

如果您只使用一次或两次,那么请写出完全限定的名称,这样其他人就不必在文件顶部找到你想要的对象。

答案 2 :(得分:1)

这实际上取决于您要求每个人的频率。一般来说,我使用的缩写版本最常用于我所指的类型,并且对于不常使用的类型使用较长的名称。我最后会说,如果你最终在同一个文件中有很多用法,你应该使用命名空间别名,但对我而言,只有在代码膨胀到难以达到的程度之后,这才是最后的手段。跟踪发生的事情。

答案 3 :(得分:1)

自己也有同样的想法。我认为查找类的名称是一个坏主意。例如,我有一个数据访问层和一个业务层。两者都与用户打交道。所以我有......

Project1.Business.User Project1.DataAccess.User

试图为这些类想出创造性的新名称是浪费时间,并且可能意味着没有意义的类的奇怪名称。命名类已经足够令人头痛。

我同意McWafflestix“我使用的缩写版本最常用于我所指的类型,并且使用较长名称的类型较少使用”。

答案 4 :(得分:1)

这很简单。一次听.NET框架指南实际上有所帮助(尽管本书中的大量内容只是Java风格的简单元素但在Redmond Wonderland中再次出现)..

您应避免在交叉或项目内/库混合命名空间中使用类似的类型名称,即。跨域和模型混合(即使在C ++中极其严格和强大,它也有编译器,解决方案和枚举式编译器崩溃和问题的化身)。

因此,即使完全符合条件也不是万无一失(而且btw别名和'使用'非常有限,最多会造成轻微的重复,以及证明通用编程中的C#弱点等。)

根据我的经验,数据域类型是更合适的名称的主要目标,因此名称重构是:

a)便宜(作为丰富的AST中的过程,但在C#中提供简单的adt-s支持,在IDE中右键单击并根据受类型挑战的动态Ruby粉丝/支持者感觉强大)

[也可以解读为:4.0动态功能绵羊会责怪所有人但不考虑名称空间或功能JS,C模板(不是C-with-classes)或类似的东西)

b)更好地传达语义,即。意图(即管道+支持构建自己的处理)

c)通常具有原始但有类型的性质或信息(不是OO类型;即OO风格的批评,如前面的书本身直接从介绍中提取所有'模型'以引用土地)

d)和'别名'在跨域使用中成为一个有用的工件(这实际上是可能的,并且非常像2020年......即价值型编程)

确实没有规则,但要注意你会在最不期望的时候看到开发中名称空间的混合......这意味着对于一个有管理意识的开发人员来说只有一件事:混乱。加上稍微不那么严重,更多的编译时间和IntelliNonsense错误当然..

所有语言都存在严重问题,因此这是您的设计/命名问题。甚至工具供应商也可以搞砸机器解析...说基于过时浏览信息的增强型流行IDE的输出;然后,其他人对托管语言做得很好。

并不是说我反对复制名称,有些情况(它们很难但很必要)混合双+互操作+表示等其他模型,其中相同的名称使其更具可读性;即。复制是双重用法的必要条件..但这是C#不友好或不鼓励的低级习语(re:赞成开销)。