2009-05-03 3 views
0

Ich arbeite an einem Projekt und ich kam zu dem folgenden Namensproblem.Was soll ich tun, wenn ich denselben Klassennamen für verschiedene Namespaces verwende?

Ich möchte das Fabrikmuster implementieren, aber ich kenne nicht die besten Klassenbenennungen (ich wechsele von einem zum anderen und es ist ziemlich zeitaufwendig: S).

Ich gehe in der Regel für Namespaces Gruppen von Klassen zu trennen, aber mein Problem ist mit diesem speziellen Stück Code:

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

Mein Problem ist, dass ich kann, wenn ich diese Struktur verwenden Verwechseln Sie die Mesh-Klassen (ob es sich um die Factory-Klasse oder die tatsächliche Mesh-Klasse handelt). Eigentlich ist dies eine Vereinfachung, mein Problem beinhaltet einige weitere Namespaces und die Klassen, die den gleichen Namen haben, werden in beiden Namespaces verwendet.

Ich war auf vielleicht mit Suffixen denken, die Klassen zu trennen und sie auf dem gleichen Namensraum, zum Beispiel setzen:

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

So gibt es keine Verwirrung darüber, was jede Klasse zu tun.

Ich mag die einfache Lösung nicht die unterschiedlichen Namensräume zu verwenden ist und verschiedene Namen zu erfinden, weil ich den Namespace-Namen würde am Ende mit ihnen differenzieren:

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

Ich ziehe die zweite Option.

Gibt es einen guten Grund, warum ist die erste Option besser? Oder gibt es einen anderen Weg? Was sagen Best Practices dazu?

Antwort

0

Aus welchen Gründen haben Sie die Mesh-Klasse "Mesh" benannt?

Hat die Factory-Klasse, die eine Mesh-Instanz erzeugt, dieselben Gründe?

Wenn ja, dann sollten sie die gleiche Klasse mit dem gleichen Namen sein.

Wenn nicht, dann sollten sie unterschiedliche Klassen mit unterschiedlichen Namen sein.

Da es wahrscheinlich ist, dass sie nur den Zweck der Factory-Klasse sein wird, Instanzen der Mesh-Klasse zu erzeugen, schlage ich vor, Sie nennen es MeshFactory.

Der Namensraum ist nicht relevant.

0

Sie müssen sich vollständig bei der Verwendung qualifizieren. Verwenden Sie Aliase, wenn Ihre vollqualifizierten Namen zu lang sind.

a.Mesh b.Mesh

0

Im Allgemeinen und in .NET Land (insbesondere C#) Ich würde die Klasse neu zuordnen, wenn es um es absolut keine Möglichkeit ist (nämlich 3rd-Party):

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

Abgesehen davon, dass Sie offensichtlich nicht sprechen C# (die Frage sollte mit C++ markiert werden) würde ich den gesamten Namespace bei der Referenzierung entweder verwenden.Während es unbequem ist, es zu tippen, braucht man nur einen Fehler, um ein Problem zu sein.

1

Denken Sie daran, diese goldene Regel der "Best Practices" in OO-Design: Benennung Ihrer Klassen ist leicht 50% der Design-Lösung. Wenn Sie Probleme haben, Entitäten zu benennen, ist dies ein Hinweis darauf, dass Sie kein klares konzeptionelles Modell im Kopf haben.

Verwandte Themen