【问题标题】:What should I do if I have the same class name on different namespaces?如果我在不同的命名空间上有相同的类名,我该怎么办?
【发布时间】:2010-10-23 09:34:17
【问题描述】:

我正在做一个项目,我遇到了以下命名问题

我想实现工厂模式,但我不知道要使用的最佳类命名(我正在从一个更改为另一个,这非常耗时:S)。

我通常使用命名空间来分隔 类,但我的问题 是这段特定的代码:

class Mesh
{
    ...
};
namespace Factory
{
    class Mesh
    {
        ...
    };
}
...
Factory::Mesh meshFactory;
Mesh *mesh = meshFactory.create(...);

我的问题是,如果我使用这种结构,我可以混合 Mesh 类(无论是工厂类还是实际的 Mesh 类)。实际上,这是一种简化,我的问题涉及更多的命名空间,并且在两个命名空间中都使用了具有相同名称的类。

我在考虑是否可以使用后缀来分隔类并将它们放在同一个命名空间中,例如:

class Mesh
{
     ...
};
class MeshFactory
{
     ...
};
MeshFactory meshFactory;
Mesh *mesh = meshFactory.create(...);

所以每个班级的作用没有混淆。

我不喜欢使用不同名称空间并发明不同名称的简单解决方案,因为我最终会使用名称空间名称来区分它们:

class Mesh
{
    ...
};
namespace Factory
{
    class MeshFactory // I can't figure a better different name
    {
        ...
    };
}

我更喜欢第二种选择。

第一个选项更好有充分的理由吗?还是有其他方法?最佳实践对此有何看法?

【问题讨论】:

    标签: naming-conventions namespaces


    【解决方案1】:

    请记住 OO 设计中“最佳实践”的这条黄金法则:命名类很容易占设计解决方案的 50%。如果您在命名实体时遇到问题,则表明您没有清晰的概念模型。

    【讨论】:

      【解决方案2】:

      是什么原因导致您将 Mesh 类命名为“Mesh”?

      产生 Mesh 实例的工厂类是否具有所有相同的原因?

      如果是,那么它们应该是同一个类,具有相同的名称。

      如果不是,那么它们应该是不同的类,具有不同的名称。

      由于工厂类的唯一目的可能是生成 Mesh 类的实例,因此我建议您将其命名为 MeshFactory。

      命名空间不相关。

      【讨论】:

        【解决方案3】:

        您必须完全符合使用条件。如果您的完全限定名称太长,请使用别名。

        a.Mesh b.网格

        【讨论】:

          【解决方案4】:

          一般来说,在 .NET 领域(特别是 C#)中,如果绝对没有办法绕过它(即第 3 方),我会重新映射该类:

          using MyMesh = My.Mesh;
          using FooMesh = Foo.Mesh;
          

          除非你显然不是在谈论 C#(这个问题应该用 c++ 标记),否则我会在引用任何一个时使用完整的命名空间。虽然打字不方便,但只需一个错误就很麻烦。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-07-31
            • 2011-12-01
            • 1970-01-01
            • 1970-01-01
            • 2015-07-18
            • 1970-01-01
            • 2015-10-23
            相关资源
            最近更新 更多