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

| 我有两个不同的名称空间,其中有许多具有相同名称的类。我相信一些代码将使它更容易理解:
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,或者从PCL切换到PostScript,这将使其更加简单。 如果必须在同一代码文件中使用这两个类,请为名称空间创建别名。读起来很清楚:
using Pcl = Print.Pdl.Pcl6.Operators;
using PostScript = Print.Pdl.PostScript.Operators;
...
// use PCL
Pcl.BaseOperator.DoSomething();
// Use PostScript
PostScript.BaseOperator.DoSomething();
谢谢, 卢西亚诺·巴格曼
IMO这是一个棘手的问题。要很好地回答这个问题,您需要知道人们一次使用两个名称空间的可能性有多高,以及他们不得不为所有名称加上前缀而感到烦恼。 我个人倾向于使用“不同的名称”。我认为命名空间是一种限制代码中可见名称集的机制,并且可以防止名称冲突(即使在此缩减集中也是如此)。因此,保持冲突“不太可能”很重要。因此,我个人不会故意设计冲突。 尤其是由于您的情况相差太小:ѭ3only仅比
BasePsOperator
短一点。

bab

如果两个建议的基类之间在功能或接口上没有区别,则可以创建另一个带有BaseOperator的通用名称空间-只需定义一次即可。
我的意见是您应使用反映专业化的命名方案。 我的意思是您不需要考虑它是前缀,后缀还是其他任何前缀。只需写下可以清楚地标识类的名称即可。 坦白地说,我相信命名空间不会补充正确的类命名方案,因为名称空间是一种组织性的东西,而类是程序的一部分。 因此,总而言之,我会选择第二个选项:名称空间和类的专业命名。
不同的名称空间只是...名称,空格不同,因此(通常)您不必担心跨名称空间边界的重复名称。 但是,您应该注意用法。例如您正在创建一个具有许多不同层(在不同名称空间中)的分层应用程序,则您不想重复可能在各层之间共享的类名。 如果您觉得在名称空间之间使用重复命名是明智的,则可以始终使用方便的using语句在使用类中重命名,例如 您有两个User类:
Data.Entities.User;
App.Core.User;
并希望在同一地方使用它们... 您可以使用简单的using语句,例如
using HttpUser = App.Core.User; 
为其中之一起别名,以便避免完全限定,并避免造成任何混淆。
如果您尝试避免重复的类名,那么维护代码的开发人员将不胜感激。只是一眼就很难知道正在使用什么类。

要回复问题请先登录注册