我正在开展一个项目,我遇到了以下命名问题。
我想实现工厂模式,但我不知道要使用的最佳类命令(我正在从一个变为另一个并且它非常耗时: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
{
...
};
}
我更喜欢第二种选择。
有没有一个坚实的理由为什么第一个选择更好?或者还有另一种方式吗?最佳实践对此有何看法?
答案 0 :(得分:1)
请记住OO设计中的“最佳实践”的黄金法则:命名您的类很容易就是设计解决方案的50%。如果您在命名实体时遇到问题,则表明您脑海中没有明确的概念模型。
答案 1 :(得分:0)
导致您将Mesh类命名为“Mesh”的原因是什么?
生成Mesh实例的工厂类是否共享所有相同的原因?
如果是,那么它们应该是同一个类,具有相同的名称。
如果没有,那么它们应该是不同的类,名称不同。
因为它们可能只是工厂类的目的是生成Mesh类的实例,所以我建议你将它命名为MeshFactory。
名称空间不相关。
答案 2 :(得分:0)
您必须完全符合使用资格。如果您的完全限定名称太长,请使用别名。
a.Mesh b.Mesh
答案 3 :(得分:0)
一般而言,在.NET版本(特别是C#)中,如果完全没有办法(即第三方),我会重新编写该类:
using MyMesh = My.Mesh;
using FooMesh = Foo.Mesh;
除此之外,你显然不是在说C#(问题应该用c ++标记)我会在引用时使用完整的命名空间。虽然不方便打字,但只需要一个错误就是麻烦。