我有两个不同的命名空间,有很多具有相同名称的类。我相信一些代码会让人们更容易理解:
namespace Print.Pdl.PostScript.Operators
{
public abstract class BaseOperator : IOperator
{
// ...
}
}
namespace Print.Pdl.Pcl6.Operators
{
public abstract class BaseOperator : IOperator
{
// ...
}
}
基本实现是相同的,因为PostScript和PCL具有类似的结构。因此,两个名称空间最终都与几个类具有相同的名称。
我很想做以下事情......
namespace Print.Pdl.PostScript.Operators
{
public abstract class BasePsOperator : IPsOperator
{
// ...
}
}
namespace Print.Pdl.Pcl6.Operators
{
public abstract class BasePclOperator : IPclOperator
{
// ...
}
}
...但是,恕我直言,它有点失败的目的,因为识别中存在冗余。如果命名空间已经创建了逻辑障碍,为什么我应该加前/更改类名?
那么,你们的想法是什么?我应该保留相同的名称,因为它们位于不同的名称空间中,或者我应该使用前缀/更改类名称以便更容易识别源,并避免在有人想要同时使用这两个名称空间时发生冲突?
谢谢!
答案 0 :(得分:16)
诺尔德,
我认为你不应该牺牲架构来支持可读性。我相信如果你保持相同的类名,它会更直观,如果你从PCL切换到PostScript,反之亦然。
如果必须在同一代码文件中使用这两个类,请为命名空间创建别名。读起来非常清楚:
using Pcl = Print.Pdl.Pcl6.Operators;
using PostScript = Print.Pdl.PostScript.Operators;
...
// use PCL
Pcl.BaseOperator.DoSomething();
// Use PostScript
PostScript.BaseOperator.DoSomething();
谢谢, 卢西亚诺巴格曼
答案 1 :(得分:10)
这是一个棘手的问题IMO。为了更好地回答这个问题,你需要知道人们一次可能同时使用这两个名称空间的频率,以及他们必须使用命名空间为所有内容添加前缀是多么恼火。
我个人倾向于倾向于“不同的名字”。我认为命名空间是一种限制代码中可见名称集的机制,并且防止名称在这个简化集中发生冲突的不太可能发生的事件。所以保持冲突“不太可能”很重要。因此,我个人不会故意设计冲突。
特别是因为在你的情况下差异很小:BaseOperator
只比BasePsOperator
短一点。
答案 2 :(得分:3)
如果两个提议的基类之间没有功能或接口差异,那么可能会创建另一个带有BaseOperator的通用命名空间 - 并且只需定义一次。
答案 3 :(得分:3)
我的意见是你应该使用反映专业化的命名方案。
我的意思是你不需要考虑它是前缀,后缀还是其他任何东西。只需写出可以清楚识别类别的名称。
老实说,我认为命名空间不会满足正确的类命名方案,因为命名空间是一个组织的东西,而类是你的程序的一部分。
所以,在一天结束时,我会选择第二个选项:命名空间和类的专门命名。
答案 4 :(得分:2)
不同的名称空间只是... 不同,名称,空格 所以你根本不用担心(通常)关于命名空间边界的重复名称。
但是,你应该注意使用。例如您正在创建具有许多不同层(在不同名称空间中)的分层应用程序,您不希望复制可能跨层共享的类名。
如果您觉得在命名空间之间使用重复命名是明智的,那么您总是可以使用方便的using语句在消费类中重命名,例如
你有两个用户类:
Data.Entities.User;
App.Core.User;
想在同一个地方使用它们......
您可以使用简单的使用声明,例如
using HttpUser = App.Core.User;
别名其中一个,因此避免完全限定,并避免任何混淆。
答案 5 :(得分:1)
如果您尝试避免重复使用类名,那么在您欣赏它之后,开发人员会对此进行维护。它只是让人很难一目了然地说出正在使用哪个类。