Domanda

Sto lavorando a un progetto e sono arrivato al seguente problema di denominazione .

Mi piacerebbe implementare il modello di fabbrica ma non conosco i nomi delle classi migliori da usare (sto cambiando da uno all'altro e richiede molto tempo: S).

Di solito cerco spazi dei nomi per separare gruppi di classi, ma il mio problema è con questo specifico pezzo di codice:

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

Il mio problema è che se uso questa struttura posso confondere le classi Mesh (sia che si tratti della classe factory o della classe Mesh effettiva). In realtà, questa è una semplificazione, il mio problema riguarda alcuni più spazi dei nomi e le classi che hanno lo stesso nome vengono utilizzate in entrambi gli spazi dei nomi.

Stavo pensando di usare forse i suffissi per separare le classi e metterle nello stesso spazio dei nomi, ad esempio:

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

Quindi non c'è confusione su ciò che ogni classe fa.

Non mi piace la semplice soluzione che consiste nell'usare spazi dei nomi diversi e inventare nomi diversi, perché finirei con il nome dello spazio dei nomi per differenziarli:

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

Preferisco la seconda opzione.

C'è una solida ragione per cui è meglio la prima opzione? oppure c'è un'altro modo? Cosa dicono le migliori pratiche al riguardo?

È stato utile?

Soluzione

Quali sono i motivi che ti hanno spinto a nominare la classe Mesh " Mesh " ;?

La classe factory che produce un'istanza Mesh condivide tutti gli stessi motivi?

In tal caso, dovrebbero essere della stessa classe, con lo stesso nome.

In caso contrario, dovrebbero essere classi diverse, con nomi diversi.

Poiché è probabile che il solo scopo della classe factory sia produrre istanze della classe Mesh, ti suggerisco di chiamarlo MeshFactory.

Lo spazio dei nomi non è pertinente.

Altri suggerimenti

Ricorda questa regola d'oro di " best practice " nella progettazione OO: denominare le tue classi è facilmente il 50% della soluzione di progettazione. Se hai problemi a nominare le entità, è indicativo del fatto che non hai in mente un modello concettuale chiaro.

Devi qualificarti completamente all'utilizzo. Usa gli alias se i tuoi nomi completi sono troppo lunghi.

a.mesh b.Mesh

In generale e in .NET land (in particolare C #) rimapperei la classe se non ci fosse assolutamente alcun modo per aggirarla (vale a dire terze parti):

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

Escludendo questo e che ovviamente NON stai parlando in C # (la domanda dovrebbe essere taggata con c ++) Vorrei usare l'intero spazio dei nomi quando faccio riferimento. Anche se scomodo da digitare, basta solo un errore per essere una seccatura.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top