Was soll ich tun, wenn ich den gleichen Klassennamen auf verschiedenen Namensräumen haben?

StackOverflow https://stackoverflow.com/questions/816088

  •  03-07-2019
  •  | 
  •  

Frage

Ich arbeite an einem Projekt, und ich kam zu dem folgenden Namensgebung Problem .

Ich möchte das Werk Muster implementieren, aber ich weiß nicht, die beste Klasse Benennungen zu verwenden (ich bin von einem zum anderen zu ändern und es ist ziemlich zeitaufwendig: S).

ich in der Regel für Namensräume gehen zu trennen Gruppen von Klassen, 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, wenn ich diese Struktur verwenden kann ich die Mesh-Klassen mischen (ob die Factory-Klasse ist oder die tatsächliche Mesh-Klasse). Eigentlich ist dies eine Vereinfachung, mein Problem betrifft einige weitere Namespaces und die Klassen, die den gleichen Namen haben, werden in beiden Namespace verwendet.

Ich dachte, auf vielleicht Suffixe mit den Klassen zu trennen und sie auf dem gleichen Namensraum setzen, zum Beispiel:

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

Es gibt also 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.

Sie haben einen festen Grund, warum besser ist die erste Option? Oder gibt es einen anderen Weg? Was bedeutet Best Practices dazu sagen?

War es hilfreich?

Lösung

Was sind die Gründe, die verursacht Sie die Mesh-Klasse „Mesh“ zu nennen?

Hat die Factory-Klasse, die einen Mesh-Instanz Aktie alle die gleichen Gründe produziert?

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

Wenn dies nicht der Fall, dann sollten sie verschiedene Klassen sein, mit unterschiedlichen Namen.

Da es wahrscheinlich ist, dass sie nur den Zweck der Fabrik Klasse werden Instanzen der Mesh-Klasse zu produzieren, schlage ich vor, Sie nennen es MeshFactory.

Der Namensraum ist nicht relevant.

Andere Tipps

Denken Sie daran, diese goldene Regel der „best practices“ in OO-Design: Benennen Sie Ihre Klassen leicht 50% der Designlösung ist. Wenn Sie Probleme beim Benennen von Entitäten haben, ist es die Tatsache anzeigt, dass Sie nicht ein klares konzeptionelles Modell im Kopf haben.

Sie müssen vollständig auf den Einsatz qualifizieren. Verwenden Sie Aliase, wenn Ihr voll qualifizierten Namen zu lang sind.

a.Mesh b.Mesh

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 die 3. Partei):

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

Abgesehen davon, und dass Sie offensichtlich nicht C # zu sprechen (die Frage sollte mit c markiert ++) Ich würde den vollständigen Namespace verwenden, wenn entweder referenzieren. Während unbequem, es geben Sie es einen Fehler nur dauert ein Streit sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top