Il nostro progetto è costituito da applicazioni utente e applicazioni server. L'applicazione server prepara i file di dati che l'applicazione utente consuma. Poiché i dati sono enormi, vengono archiviati in formato personalizzato. Quindi il progetto include molte classi relative alla lettura e alla scrittura dei dati. L'applicazione utente non ha bisogno del lato scrittura, quindi non vogliamo avere il codice lì sia perché potrebbe essere eseguito su dispositivi con risorse limitate sia perché prolunga la compilazione (C ++ non è noto per avere compilatori veloci).
Quindi dì che ho due classi (ne ho decine):
-
DataReader
-
DataWriter
Queste classi operano entrambe sulla stessa cosa, i dati serializzati. Ma il primo è necessario solo nell'applicazione utente e il secondo è necessario solo nell'applicazione server. Suggeriresti di mantenere tali classi
- Insieme; in dire
-
common/data/DataReader
-
common/data/DataWriter
-
- Separa come
-
userapp/data/DataReader
-
serverapp/data/DataWriter
-
Con questo va la compilazione. Il materiale comune vive in common
ed è compilato in una libreria collegata a entrambi. Quindi la prima opzione si divide ulteriormente in due:
- Insieme in
common/data
e collegati acommon.a
o - Insieme nella directory
common/data
, ma ciascuna collegata al target che ne ha bisogno.
Ora ognuno ha i suoi vantaggi e svantaggi:
- Sono strettamente correlati, quindi ha senso tenerli insieme. Ma
- avere entrambi in una libreria rende la libreria più grande e più lunga
- compilarli separatamente significa che il layout della directory non corrisponde al layout del progetto, il che è piuttosto confuso e complica gli script di compilazione
- Mantenerli separati rende la struttura di build più logica ed evita il lavoro non necessario per il compilatore, ma quando li aggiorna, i componenti distanti devono essere modificati (entrambe le applicazioni sono gestite dallo stesso team, quindi non è come se qualcuno non essere a conoscenza dell'altra parte)
Al momento abbiamo una miscela tra gli approcci (alcune classi sono separate, altre no e la libreria comune contiene molte cose che dovrebbero essere nei singoli progetti), che vorrei ripulire.
C'è qualche raccomandazione abituale per tale situazione? O qualche esperienza utile con casi simili?