¿Qué debo hacer si tengo el mismo nombre de clase en diferentes espacios de nombres?

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

  •  03-07-2019
  •  | 
  •  

Pregunta

Estoy trabajando en un proyecto y vine al siguiente problema de nombres .

Me gustaría implementar el patrón de fábrica, pero no sé cuáles son los mejores nombres de clase para usar (estoy cambiando de uno a otro y consume bastante tiempo: S).

Por lo general, voy a los espacios de nombres para separar grupos de clases, pero mi problema está con este código específico:

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

Mi problema es que si uso esta estructura puedo mezclar las clases Mesh (ya sea la clase de fábrica o la clase Mesh real). En realidad, esto es una simplificación, mi problema involucra algunos espacios de nombres más y las clases que tienen el mismo nombre se usan en ambos espacios de nombres.

Estaba pensando en tal vez usar sufijos para separar las clases y colocarlas en el mismo espacio de nombres, por ejemplo:

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

Así que no hay confusión sobre lo que hace cada clase.

No me gusta la solución simple que consiste en usar diferentes espacios de nombres e inventar nombres diferentes, porque al final usaré el nombre del espacio de nombres si los diferenciaré:

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

Prefiero la segunda opción.

¿Hay una razón sólida por la cual es mejor la primera opción? ¿O hay otra manera? ¿Qué dicen las mejores prácticas sobre esto?

¿Fue útil?

Solución

¿Cuáles son las razones por las que nombraste la clase Mesh " Malla " ;?

¿La clase de fábrica que produce una instancia de Mesh comparte las mismas razones?

Si lo hace, entonces deberían ser de la misma clase, con el mismo nombre.

Si no lo hace, entonces deberían ser clases diferentes, con nombres diferentes.

Dado que es probable que el único propósito de la clase factory sea producir instancias de la clase Mesh, le sugiero que la llame MeshFactory.

El espacio de nombres no es relevante.

Otros consejos

Recuerde esta regla de oro de " mejores prácticas " en diseño OO: nombrar sus clases es fácilmente el 50% de la solución de diseño. Si tiene problemas para nombrar entidades, es un indicio del hecho de que no tiene un modelo conceptual claro en su mente.

Tienes que calificar completamente con el uso. Use alias si sus nombres completos son demasiado largos.

a.Mesh b.Mesh

En general y en .NET land (específicamente C #) volvería a asignar la clase si no hubiera ninguna forma de evitarlo (es decir, una tercera parte):

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

Salvo que y obviamente no estás hablando de C # (la pregunta debería estar marcada con c ++) Yo usaría el espacio de nombres completo al hacer referencia a cualquiera. Si bien es un inconveniente escribirlo, solo toma un error ser una molestia.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top