Domanda

Sul progetto stiamo cercando di raggiungere un accordo sull'utilizzo dello spazio dei nomi. Abbiamo deciso che il primo livello sarà "productName" e il secondo è "quotNome modulo".

productName::moduleName

Ora se il modulo è una specie di modulo di utilità non c'è nessun problema ad aggiungere un terzo spazio dei nomi. Ad esempio per aggiungere " str " ;: productName :: utilityModuleName :: str - per dividere lo spazio in cui tutte " stringhe " cose correlate andranno.

Se il modulo è il principale modulo aziendale, abbiamo molte opportunità e quasi nessun accordo.

Ad esempio

class productName::mainModuleName::DomainObject

e

class productName::mainModuleName::DomainObjectSomethingElseViewForExample

può essere entrambi su

namespace productName::mainModuleName::domainObject
class Data
class ViewForExample

Perché dovremmo creare classi interne non private e non spazi dei nomi? Perché dovremmo creare una classe in cui tutti i metodi sono statici (tranne i casi in cui questa classe sarà un parametro modello)?

Il progetto consiste in 1 GB di codice sorgente. Quindi, qual è la migliore pratica per dividere i moduli negli spazi dei nomi in c ++?

È stato utile?

Soluzione

A cosa servono gli spazi dei nomi:

Gli spazi dei nomi hanno lo scopo di stabilire il contesto solo in modo da non avere conflitti di denominazione.

Regole generali:

Non è necessario specificare un contesto eccessivo e causerà più inconvenienti di quanto valga la pena.

Quindi vuoi usare il tuo miglior giudizio, ma segui comunque queste 2 regole:

  • Non essere troppo generico quando usi gli spazi dei nomi
  • Non essere troppo specifico quando si usano gli spazi dei nomi

Non sarei così severo su come usare i nomi degli spazi dei nomi e semplicemente usare gli spazi dei nomi basati su un gruppo di codice correlato.

Perché gli spazi dei nomi troppo generici non sono utili:

Il problema con la divisione dello spazio dei nomi a partire dal nome del prodotto è che spesso avrai un componente di codice o una libreria di base comune a più prodotti.

Inoltre non userete gli spazi dei nomi Product2 all'interno di Product1, quindi specificarlo esplicitamente è inutile. Se includessi i file di Product2 all'interno di Product1, questa conversione di denominazione è ancora utile?

Perché gli spazi dei nomi troppo specifici non sono utili:

Quando si hanno spazi dei nomi troppo specifici, la linea tra questi spazi dei nomi distinti inizia a sfocarsi. Inizi a usare gli spazi dei nomi uno dentro l'altro avanti e indietro. In questo momento è meglio generalizzare insieme il codice comune nello stesso spazio dei nomi.

Classi con tutti i modelli vs statici:

  

" Perché dovremmo creare l'interno no   lezioni private e non spazi dei nomi?   Perché dovremmo creare classi dove tutto   i metodi sono statici "

Alcune differenze:

  • Gli spazi dei nomi possono essere impliciti usando la parola chiave usando
  • Gli spazi dei nomi possono essere aliasati, le classi sono tipi e possono essere dattiloscritte
  • È possibile aggiungere spazi dei nomi a; puoi aggiungere funzionalità ad esso in qualsiasi momento e aggiungervi direttamente
  • Non è possibile aggiungere classi senza creare una nuova classe derivata
  • Gli spazi dei nomi possono avere dichiarazioni in avanti
  • Con le classi puoi avere membri privati ??e membri protetti
  • Le classi possono essere utilizzate con i modelli

Esatto come dividere:

  

" Il progetto consiste in 1Gb di sorgente   codice. Quindi, qual è la migliore pratica per   dividere i moduli negli spazi dei nomi in   ? C ++ "

È troppo soggettivo dire esattamente come dividere il codice senza il codice sorgente esatto. La divisione in base ai moduli sembra logica, ma non l'intero prodotto.

Altri suggerimenti

Questo è tutto soggettivo, ma esiterei ad approfondire più di 3 livelli. A un certo punto diventa troppo ingombrante. Quindi, a meno che la tua base di codice non sia molto, molto ampia, la terrei piuttosto superficiale.

Dividiamo il nostro codice in sottosistemi e disponiamo di uno spazio dei nomi per ciascun sottosistema. Le cose di utilità andrebbero nel loro spazio dei nomi se effettivamente fossero riutilizzabili attraverso sottosistemi.

Mi sembra che tu stia cercando di usare gli spazi dei nomi come strumento di progettazione. Non sono pensati per questo, hanno lo scopo di prevenire scontri con i nomi. Se non hai gli scontri, non hai bisogno degli spazi dei nomi.

Divido gli spazi dei nomi in base ai suoi usi:

Ho uno spazio dei nomi separato, in cui ho definito tutte le mie interfacce (classi virtuali pure).

Ho uno spazio dei nomi separato, in cui ho definito le mie classi di libreria (come libreria db, libreria di elaborazione).

E ho uno spazio dei nomi separato, dove ho i miei oggetti di core business (business logic) (come acquisto_ordine, ecc.)

Immagino che si tratti di definirlo in un modo, che non sarà difficile da gestire in futuro. Quindi, puoi verificare le difficoltà che circonderanno il tuo progetto attuale.

E se pensi che vadano bene, dovresti seguirlo.

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