Sto affrontando problemi nella strutturazione di progetti e librerie.
Nella società per cui lavoro spesso vedo che le cose sarebbero più manutenibili e meno soggette a errori, se potessimo estrarre codice comune e creare librerie con quel codice.
Un semplice esempio potrebbe essere l'uso di una libreria di registrazione personalizzata invece di copiare codice da altri progetti o, peggio ancora, scrivere di nuovo tutto da capo.
Quindi, volendo esporre le cose nelle biblioteche, sorge la domanda su come farlo? La mia idea è di mettere ogni lib (o relativo set di librerie) nel proprio repository. Ma questo significherebbe che per costruire il progetto, è necessario verificare almeno due repository. Poiché ho lavorato a lungo su un progetto con dipendenze a un lotto di altri repository, sono diventato abbastanza attento a creare dipendenze da altri progetti.
Quindi la mia domanda è: c'è un'altra bella soluzione per questo? Cosa fate ragazzi?
Ci sono più di 150 repository, che non sono tutti correlati, ovviamente. La maggior parte dei progetti ha il proprio repository. Per fornire uno scenario, ipotizziamo quanto segue:
- Applicazione A
- L'applicazione B (fa già riferimento a 30 altri repository interni)
- LibXYZ
Entrambe le applicazioni devono utilizzare LibXYZ.
Versioning:
Il controllo delle versioni dipende dal progetto. I vecchi progetti hanno appena preso il numero di revisione da SVN. Ora stiamo passando al versioning con numeri di fix come 1.2 o 1.2.5, quindi assumiamo questo come approccio di versioning. Ogni versione è contrassegnata in SVN.
Plattform:
Utilizziamo Qt come target principalmente di Windows. Ma apprezzo molto un approccio cross-plattform.
Cosa mi impedisce di creare un repository per codice comune?
Il problema che vedo è che aggiunge molta complessità a un progetto. Per essere in grado di compilare ed eseguire un'applicazione ho bisogno di:
- controlla più repository
- compila tutte le dipendenze
- copia tutte le DLL compilate nella directory di compilazione dell'applicazione
Tutto questo di nuovo deve essere documentato e forse anche da includere negli script di compilazione. Inoltre questo costringe gli altri membri del team ad avere esattamente la stessa configurazione di me.
Non sto dicendo che questo è impossibile, sto solo cercando un approccio migliore.