2009-05-03 59 views
0

我正在進行一個項目,我來到以下命名問題如果我在不同的命名空間上擁有相同的類名,我應該怎麼做?

我想實現工廠模式,但我不知道最好的類namings使用(我從一個到另一個變化,這是相當耗時: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

導致您命名Mesh類「Mesh」的原因是什麼?

這是否會產生網格實例的工廠類共享所有相同的理由?

如果確實如此,那麼他們應該是同一類,具有相同的名稱。

如果沒有,那麼他們應該是不同階層,具有不同的名稱。

因爲它很可能是他們唯一的工廠類的目的將是產生網格類的實例,我建議你的名字MeshFactory。

命名空間不相關。

0

您必須完全符合使用資格。如果您的完全限定名稱太長,請使用別名。

a.Mesh b.Mesh

0

一般在.NET土地(特別是C#)我會重新映射類,如果有絕對沒有辦法解決它(即第三方):

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

禁止這一點,你顯然不是在說C#(這個問題應該用C++標記)我會在引用時使用完整的命名空間。雖然不方便輸入,但只是一個錯誤是一個麻煩。

1

請記住OO設計中的「最佳實踐」的黃金法則:爲您的課程命名很容易就是設計解決方案的50%。如果您在命名實體時遇到問題,則表明您的頭腦中沒有明確的概念模型。

相關問題