Qual è il modo migliore per gestire le classi / librerie riusabili separatamente?

3

Quando si scrive il codice, spesso mi vengono in mente classi o una serie di classi con un'elevata riusabilità. Sto cercando un modo semplice e diretto per lavorarci separatamente. Mi piacerebbe essere in grado di integrarli facilmente in qualsiasi progetto; dovrebbe anche essere possibile passare a una versione diversa con il minor numero possibile di comandi.

Ho ragione supponendo che git (o un altro VCS) sia il più adatto per questo? Ho pensato di creare repository locali per ogni classe / progetto / libreria / plugin e quindi semplicemente clonarli / trascinarli. Sarebbe bello se potessi fare riferimento a quei progetti per nome, non per il percorso completo. Mi piace git clone someproject .

modifica: per chiarire, so cosa sono i VCS e li uso. Sto solo cercando un modo comodo per archiviare e modificare alcuni pezzi riutilizzabili di codice (inclusi i test unitari) separatamente e per poterli includere (senza i test unitari) in altri progetti, senza dover copiare manualmente i file. Apache Maven è un buon esempio, ma sto cercando una soluzione indipendente dalla lingua, in modo ottimale basata sulla riga di comando.

    
posta Tom 16.10.2012 - 09:40
fonte

3 risposte

2

Come @jgauffin sottolinea che la gestione dei pacchetti è davvero il modo per volare qui. Ma non tutto ha un gestore di pacchetti. O altre volte hai solo bisogno che le risorse vadano d'accordo.

Le specifiche sono in realtà una funzione di quale piattaforma, cosa che vuoi vedere qui sarebbe il tipo di funzionalità esposte da git submodules o hg subrepos . Entrambi sono progettati per estrarre parte del tuo repository di origine da una fonte esterna. Nel caso di hg subrepos non è nemmeno necessario che HG - git o svn siano accessibili.

La vera sfida arriva quando si desidera un sottoreposto, ma è necessario modificare alcuni file al suo interno.

    
risposta data 16.10.2012 - 19:16
fonte
10

Vorrei tenerli in un repository da qualche parte e quindi utilizzare uno strumento di pacchetto per includerli nei miei progetti.

  • .NET ha nuget .
  • Javascript ha npm
  • Ruby usa gem

ecc.

    
risposta data 16.10.2012 - 13:17
fonte
0

Un VCS è la strada da percorrere. Quello di cui hai bisogno è decidere come archiviare il codice / gli elementi di configurazione nel tuo repository VCS. La prima domanda che vorrei porre è quanto sono stabili questi componenti riutilizzabili?

Se non cambieranno molto, allora inserirli in un repository / database / progetto / cartella / (qualsiasi terminologia utilizzata dal VCS) e etichettarli in base al prodotto a cui corrispondono. Poi, quando è il momento di fare un po 'di codice, lo sviluppatore ottiene il sistema su cui stanno lavorando dal suo repository e poi le cose condivise, usando l'etichetta appropriata per ottenere le versioni appropriate.

Se le librerie condivise cambiano solo un po 'nel tempo, quindi aggiungi delle diramazioni per le linee di sviluppo che ne hanno bisogno e usa le etichette. Ora puoi ottenere i file / le versioni richiesti come sopra usando le etichette appropriate. È quindi necessario un processo di gestione per aggiornare periodicamente il trunk con questi rami e testarlo con tutte le applicazioni interessate.

Se ci sarà molta personalizzazione, allora probabilmente dovrai mantenere repository separati per progetto in quanto sarà più facile / economico gestirlo su un gruppo di repository con un sacco di rami / etichette / gruppi di promozione e il test di integrazione che ciò comporta.

Per estrarli, usa qualche strumento se puoi essere preso la briga di capire come configurarlo. Oppure, scrivi uno script veloce per ottenere i file necessari per ogni progetto e crea la struttura del file per il progetto quando hai bisogno di iniziare qualche sviluppo. Qualcosa come questo codice di psudo:

required_label = "version 1.1.1"
project = "funStuff"
destination = "server/share/folder/"

get from vcs project $project $required_label into $destination
get from vcs "library project" $required_label into $destination/lib/

echo "mettiti al lavoro"

Potrebbe non funzionare se hai utilizzato un'integrazione di gestione delle versioni integrata IDE. Potrebbe essere necessario che gli sviluppatori utilizzino l'interfaccia di VCS per controllare gli elementi di configurazione in entrata / uscita che verranno modificati.

La chiave per fare questo lavoro è assicurarsi che il sistema di etichettatura appropriato sia applicato dal VCS: quelli che ho usato consentono di impostare una regola che impone l'aggiunta o un'etichetta al momento del check-in o di avere la struttura per etichette fluttuanti. Utilizzare come appropriato.

    
risposta data 17.10.2012 - 08:18
fonte

Leggi altre domande sui tag