Non sono uno sviluppatore di C ++, quindi questa risposta sarà più generica per OOA & D:
Tipicamente, gli oggetti del codice dovrebbero essere raggruppati in termini di rilevanza funzionale, non necessariamente in termini di costrutti specifici della lingua. La domanda chiave, sì e no, che dovrebbe sempre essere posta è: "ci si aspetta che il coder finale utilizzi la maggior parte o tutti gli oggetti che ottengono quando consumano una libreria?" Se sì, raggruppa. In caso contrario, prendi in considerazione la suddivisione degli oggetti di codice e il loro posizionamento più vicino ad altri oggetti che ne hanno bisogno (aumentando così la possibilità che il consumatore abbia bisogno di tutto ciò che sta effettivamente accedendo).
Il concetto di base è "alta coesione"; i membri del codice (dai metodi di una classe fino alle classi in un namespace o DLL e le stesse DLL) dovrebbero essere organizzati in modo tale che un programmatore possa includere tutto ciò di cui hanno bisogno e nulla che non facciano. Ciò rende il design generale più tollerante nei confronti del cambiamento; le cose che devono cambiare possono essere, senza influenzare altri oggetti di codice che non devono cambiare. In molte circostanze, rende l'applicazione più efficiente in termini di memoria; una DLL viene caricata nella sua interezza nella memoria, indipendentemente da quante di quelle istruzioni siano mai state eseguite dal processo. La progettazione di applicazioni "snelle" richiede quindi di prestare attenzione a quanto codice viene tirato in memoria.
Questo concetto si applica a praticamente tutti i livelli di organizzazione del codice, con vari gradi di impatto su manutenibilità, efficienza della memoria, prestazioni, velocità di costruzione, ecc. Se un codificatore deve fare riferimento a un'intestazione / DLL di dimensioni piuttosto monolitiche solo per accedere un oggetto, che non dipende da nessun altro oggetto in quella DLL, probabilmente l'inclusione di quell'oggetto nella DLL dovrebbe essere ripensata. Tuttavia è possibile andare troppo lontano anche dall'altra parte; una DLL per ogni classe è una cattiva idea, perché rallenta la velocità di costruzione (più DLL da ricostruire con sovraccarico associato) e rende la versione un incubo.
Caso in questione: se un uso reale della libreria di codici implicasse l'uso della maggior parte o di tutte le enumerazioni che si stanno inserendo in questo singolo file "enumerations.h", quindi con tutti i mezzi raggrupparle; saprai dove cercare per trovarli. Ma se il tuo programmatore che consuma potrebbe aver bisogno solo di una o due delle dozzine di enumerazioni che stai fornendo nell'intestazione, allora ti incoraggio a metterle in una libreria separata e farne una dipendenza da quella più grande con il resto delle enumerazioni . Ciò consente ai coder di ottenere solo uno o due che vogliono senza collegarsi alla DLL più monolitica.