不同名称空间中的相同类名

我有两个不同的命名空间,有很多具有相同名称的类。 我相信一些代码会让它更容易理解:

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 { // ... } } 

…但是,恕我直言,它有点失败的目的,因为识别中存在冗余。 如果命名空间已经创建了逻辑障碍,为什么我应该加前/更改类名?

那么,你们的想法是什么? 我应该保留相同的名称,因为它们位于不同的名称空间中,或者我应该使用前缀/更改类名称以便更容易识别源,并避免在有人想要同时使用两个名称空间时发生冲突?

谢谢!

诺尔德,

我不认为你应该牺牲架构来支持可读性。 我相信它更直观,如果你保持相同的类名,如果你从PCL切换到PostScript,反之亦然,这会更简单。

如果必须在同一代码文件中使用这两个类,请为命名空间创建别名。 阅读非常清楚:

 using Pcl = Print.Pdl.Pcl6.Operators; using PostScript = Print.Pdl.PostScript.Operators; ... // use PCL Pcl.BaseOperator.DoSomething(); // Use PostScript PostScript.BaseOperator.DoSomething(); 

谢谢Luciano Bargmann

这是一个棘手的问题IMO。 要很好地回答这个问题,你需要知道人们一次可能同时使用这两个名称空间的频率,以及他们必须使用命名空间为所有内容添加前缀是多么恼火。

我个人倾向于倾向于“不同的名字”。 我认为名称空间是一种限制代码中可见名称集的机制,并且可以防止名称在此简化集中发生冲突的不太可能发生的事件。 所以保持冲突“不太可能”很重要。 因此,我个人不会故意设计冲突。

特别是因为在你的情况下,差异是如此之小: BaseOperator只比BasePsOperator短一点。

如果两个提议的基类之间没有function或接口差异,那么可能会创建另一个带有BaseOperator的通用命名空间 – 并且只需定义一次。

我的意见是你应该使用反映专业化的命名方案。

我的意思是你不需要考虑它是前缀,后缀还是其他任何东西。 只需编写可以清楚识别类的名称。

老实说,我相信命名空间不会满足正确的类命名方案,因为命名空间是一个组织的东西,而类是你的程序的一部分。

因此,在一天结束时,我会选择您的第二个选项:命名空间和类的专门命名。

不同的命名空间就是…… 不同的名称空格, 所以你不应该(通常)担心跨命名空间边界的重复名称

但是,你应该意识到使用。 例如,您正在创建具有许多不同层(在不同名称空间中)的分层应用程序,您不希望复制可能跨层共享的类名。

如果您觉得在命名空间之间使用重复命名是明智的,那么您总是可以使用方便的using语句在消费类中重命名,例如

你有两个用户类:

 Data.Entities.User; App.Core.User; 

并希望在同一个地方使用它们……

您可以使用简单的using语句,例如

 using HttpUser = App.Core.User; 

别名其中一个,因此避免完全限定,并避免任何混淆。

如果您尝试避免重复类名,那么维护代码的开发人员将会很感激。 它只是让人很难一目了然地说出正在使用什么类。