2009-04-16 166 views
4

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

namespace Project1.Data 
Object Person; 

namespace Project1.Model 
Object Person; 

Data.Person.Name=Person.Name; 

OR 

dbPerson.Name= Person.Name; 

回答

12

我会使用的命名空间和命名空间的别名,如:

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

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; 
+4

有一点需要注意,(仅仅添加到您的答案中)不要仅为一个别名使用别名。使用别名'并始终使用别名引用它们。不要让其中的一个陷入默认状态,因为这会造成混乱。 – DevinB 2009-04-16 20:34:27

2

这取决于您指的是重复名称的频率。

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

如果您只使用一次或两次,则写出完全限定的名称,以便其他人不必在您的文件顶部四处寻找来找出您所指的对象。

1

这实际上取决于你要求他们每个人的频率。通常,我使用最常用的类型的缩写版本,并且使用较不常用的类型的较长名称。我最终会说,如果你最终在同一个文件中有很多用法,那么你应该使用命名空间别名,但对我来说,这是最后的手段,只有在代码膨胀到很难关注正在发生的事情。

1

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

Project1.Business.User Project1.DataAccess.User

试图想为类新发明的名称是在浪费时间,将可能意味着很少类名字真怪含义。命名类已经足够让人头疼了。

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

1

很简单。听一次.NET框架的指导方针实际上有所帮助(尽管本书中的大量内容仅仅是Java风格的元素,但在雷德蒙德仙境中又是如此)。

您应该避免交叉或项目内类似的类型名称/库混合名称空间即。在通用领域和模型之间进行混合(即使在C++中,它也非常严格而且功能强大,它在编译器,解析和枚举式编译器崩溃和问题方面也具有化身)。因此,即使是完全符合条件的所有时间也不是没有错误的(并且btw别名和'using'极其有限,最多只会导致轻微的重复,并且证明C#在泛型编程方面的弱点等)。

以我的经验,数据域类型是一个更合适的名称的主要目标,从而为名称的重构是:

一)便宜(如丰富的AST,但简单ADT-S支持的处理等在C#中,在IDE中右键单击,并根据类型挑战的动态Ruby粉丝/支持者感觉功能强大)

[也可以理解为:4.0动态特性羊会责怪每个人但不考虑名称空间或功能JS,C -with模板(不带C类),或类似的]

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

c)通常是原始的,但类型的性质或消息(键入不OO;即OO风格的批评,如上述书本身直接破坏了介绍升降机所有“模型”来引用土地)

d)和“混叠”变为跨域使用一个有用的伪影(其实际上是可能的,并且相当2020样..即值类型编程)

实际上没有规则,但要小心,当最不可预料的情况下,你会看到名称空间在开发中的混合。这意味着管理型开发人员只有一件事:混淆。加上稍微不严重,编译时和IntelliNonsense错误,当然..

在所有语言的棘手问题,所以这是你的设计/命名问题。即使工具供应商可以搞砸机器解析..说输出基于过时浏览信息的增强型流行IDE;然后再一次,其他人对托管语言很好。

不是我反对复制名称,有混淆双+互操作+表示等其他模型的情况下(他们是艰难的,但必要的),其中同名的其他模型更容易阅读;即。重复是双重用途的必要条件..但这是C#不友好或鼓励(低成本的惯用语),(赞成开销)。