C# 命名约定和名称空间

C# 命名约定和名称空间,c#,naming-conventions,C#,Naming Conventions,如果一个图层上的对象与另一个图层上的对象具有相同的名称,那么最好使用前缀更改对象名称,还是使用新名称空间并使用完全限定的名称引用它们?例如: namespace Project1.Data Object Person; namespace Project1.Model Object Person; 我会使用名称空间和名称空间别名,例如: 在适当的命名空间中定义类: namespace Project1.Data { public class Person {...} } names

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

namespace Project1.Data
Object Person;

namespace Project1.Model
Object Person;


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

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

namespace Project1.Data
{
    public class Person {...}
}
namespace Project1.Model
{
    public class Person {...}
}
在使用类的地方,可以使用完全限定名,也可以为名称空间定义别名(如果完整名称空间很长,则特别有用):


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

如果在一个文件中多次使用,则使用第一种方法


如果您只使用了一到两次,那么请写出完全限定的名称,这样其他人就不必在您的文件顶部四处搜寻,以确定您所指的对象

这实际上取决于您请求它们的频率。一般来说,我对最常用的类型使用缩写版本,而对使用频率较低的类型使用较长的名称。我最终会说,如果你在同一个文件中有很多这两种用法,你应该使用名称空间别名,但对我来说,这是在代码膨胀到很难理解发生了什么之后的最后手段。

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

Project1.Business.User Project1.DataAccess.User

试图为类想出创造性的新名称是浪费时间,并且可能意味着类的名称很奇怪,没有什么意义。命名类已经够麻烦的了


我同意McWafflestix的观点,“我对我最常提到的类型使用缩短版本,而对不太常用的类型使用较长的名称”

很简单。只听一次.NETFramework指南实际上是有帮助的(尽管本书中的大量内容只是《雷蒙德仙境》中Java风格的简单元素)

在交叉或项目内/库混合名称空间中,应避免类似的类型名称。即跨域和模型的混合(即使在C++中,它是极端严格和强大的,它也有编译器、分辨率和枚举类型编译器崩溃和问题的化身)。 因此,即使始终完全限定也不是傻瓜(顺便说一句,别名和“使用”是极其有限的,最多只会导致轻微的重复,以及证明C#在泛型编程中的弱点等)

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

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

[也可以理解为:4.0 dynamic features sheep会责怪所有人,但不要考虑名称空间或函数JS、C-with-templates(而不是C-with-classes)或类似内容]

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

c) 通常具有原始但类型化的性质或信息(类型化不是OO;即前面提到的书中的OO风格评论,其本身直接从简介中突破,将所有“模型”提到参考领域)

d) 而“别名”在跨域使用中成为了一个有用的工件(这实际上是可能的,很像..即值类型编程)

确实没有规则,但要注意,在开发过程中,您会在最意想不到的时候看到名称空间的混合。。对于有管理意识的开发人员来说,这意味着只有一件事:困惑。当然,还有一些不太严重、编译时间更长和无意义的错误

所有语言都存在难题,因此这是您的设计/命名问题。。即使是工具供应商也会把机器弄得一团糟。。基于过时浏览信息的增强型流行IDE的输出;另外,其他人在托管语言方面做得非常好

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

需要注意的一件事,(只是补充一下你的答案)不要只对一个使用别名。对两者都使用“别名”,并始终使用别名引用它们。不要让他们中的一个违约,因为这会引起混乱。
namespace Project1.Data
{
    public class Person {...}
}
namespace Project1.Model
{
    public class Person {...}
}
using data = Project1.Data;
using model = Project1.Model;

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