Question

Je travaille sur un projet et je suis arrivé au problème de nommage suivant.

Je voudrais implémenter le modèle d'usine mais je ne connais pas les meilleurs noms de classe à utiliser (je change de l'un à l'autre et cela prend beaucoup de temps: S).

Je sélectionne généralement les groupes de classes par les espaces de noms, mais mon problème concerne cet élément de code spécifique:

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

Mon problème est que si j'utilise cette structure, je peux mélanger les classes de maillage (qu'il s'agisse de la classe usine ou de la classe de maillage réelle). En fait, il s’agit d’une simplification, mon problème concerne plusieurs espaces de noms et les classes qui portent le même nom sont utilisées dans les deux espaces de noms.

Je pensais peut-être utiliser des suffixes pour séparer les classes et les placer sur le même espace de noms, par exemple:

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

Il n'y a donc pas de confusion sur le travail de chaque classe.

Je n'aime pas la solution simple qui consiste à utiliser différents espaces de noms et à inventer des noms différents, car je finirais par utiliser le nom d'espace de noms pour les différencier:

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

Je préfère la deuxième option.

Existe-t-il une bonne raison pour laquelle choisir la première option est préférable? Ou y a-t-il un autre moyen? Que disent les meilleures pratiques à ce sujet?

Était-ce utile?

La solution

Quelles sont les raisons qui vous ont poussé à nommer la classe de maillage "Mesh"?

La classe fabrique qui produit une instance de maillage partage-t-elle les mêmes raisons?

Si c'est le cas, alors elles devraient appartenir à la même classe, avec le même nom.

Si ce n'est pas le cas, il doit s'agir de classes différentes, portant des noms différents.

Comme il est probable que le seul but de la classe factory sera de produire des instances de la classe Mesh, je vous suggère de le nommer MeshFactory.

L'espace de noms n'est pas pertinent.

Autres conseils

Rappelez-vous cette règle d'or des "meilleures pratiques". en conception OO: nommer vos classes représente facilement 50% de la solution de conception. Si vous rencontrez des problèmes pour nommer des entités, cela signifie que vous n’avez pas de modèle conceptuel clair en tête.

Vous devez vous qualifier pleinement lors de l'utilisation. Utilisez des alias si vos noms complets sont trop longs.

a.Mesh b.Mesh

En général et en .NET land (en particulier C #), je remapperais la classe s'il n'y avait absolument aucun moyen de la contourner (à savoir une tierce partie):

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

Sauf si et que vous ne parlez évidemment PAS C # (la question devrait être balisée avec c ++), j'utiliserais l'espace de noms complet pour faire référence à l'un ou l'autre. Bien que cela ne soit pas pratique de le taper, une seule erreur suffit.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top