Rilevamento di modifiche improvvise durante la modifica del codice condiviso

4

Attualmente abbiamo circa 20 soluzioni. La maggior parte di questi ha diversi progetti, tra cui progetti di condivisione delle risorse, accesso ai dati, ecc. Abbiamo avuto alcuni problemi in cui un appaltatore ha cambiato qualcosa in un progetto comune e inconsapevolmente questo rompe una serie di altre soluzioni. Al momento abbiamo 7 sviluppatori di perm e 3 appaltatori a lungo termine, che presto aumenteranno fino a circa 10.

Attualmente stiamo cercando di decidere una nuova architettura software nella nostra azienda. Attualmente stiamo cercando di decidere se combinare le nostre soluzioni in una singola super soluzione, o avere molte soluzioni più piccole con alcuni bit comuni come una soluzione e un common.dll, ecc. (La mia preferenza).

Come vedo i pro ei contro sono i seguenti:

Soluzione eccellente:

Pro

  • Una soluzione significa che se un progetto comune è rotto non lo farà compilare, in modo da non rompere accidentalmente un altro progetto.

  • Aumenterebbe la possibilità di riutilizzo del codice, eventualmente diminuendo tempo di sviluppo.

  • Alcune applicazioni si sovrappongono in modo massiccio, ospitano diverse applicazioni web una intranet per esempio.

di Con

  • Possibile complessità aggiuntiva della distribuzione.

  • Se viene modificata un'applicazione (A), è possibile testare il bit modificato. Se qualcosa è stato modificato che ha avuto un'altra applicazione (B) ma questa non è stata implementata, la prossima volta (B) è stata modificata e implementata, le modifiche precedenti sarebbero state eliminate e questo potrebbe essere in un'area che non sarebbe stata testata estesamente .

  • La soluzione sarebbe enorme, forse rendendola più complessa e difficile da mantenere, specialmente se si trattava di un'applicazione semplice e indipendente.

Soluzioni multiple

Pro

  • Le applicazioni semplici avranno soluzioni semplici che dovrebbero essere molto facili da mantenere.

  • Implementazione più semplice.

  • Test più facili.

  • Se le DLL delle aree comuni sono referenziate ci sono meno possibilità che una modifica interromperà un'altra applicazione.

di Con

  • Scoraggia il riutilizzo del codice.

  • Se le aree comuni vengono aggiunte come progetti, sarà difficile sapere se una modifica ha infranto un'altra applicazione.

  • Se le aree comuni sono DLL, cambiarle sarebbe un altro passo.

  • Alcune applicazioni "appartengono" insieme in una soluzione, come determinare quali devono essere raggruppate e quali non dovrebbero essere?

Posso chiedere cosa fanno le altre persone qui?

L'area comune dovrebbe essere aggiunta come progetto o come DLL?

Qualcos'altro da considerare?

    
posta Jay1b 19.07.2016 - 17:38
fonte

2 risposte

11

We've had a few problems where a contractor changed something in a common project and unknowingly this breaks a number of other solutions

Questo è sfortunato

We're currently trying to decide a new software architecture in our company

STOP.

Hai un problema processo , non un problema di architettura.

Una soluzione molto più semplice e di maggior valore sarebbe quella di implementare Integrazione continua e Test automatici .

Non è perfetto, ma potresti imparare molto rapidamente se un cambiamento in un progetto comune ha rotto altre soluzioni. Ad esempio:

  1. Il contraente che lavora sulla Soluzione A modifica il codice comune e si impegna.
  2. Il server di integrazione continua esegue il build di una build per tutte le soluzioni interessate e esegue i test automatici.
  3. Soluzione B non riesce a costruire
  4. La soluzione C funziona bene ma i suoi test automatici falliscono
  5. CI Server invia agli sviluppatori un'e-mail che li avvisa del problema.

Certo, questo non è buono come essere avvisato al momento della compilazione, ma ricevere una notifica pochi minuti dopo che il commit è davvero buono.

    
risposta data 19.07.2016 - 17:59
fonte
1

Mettere tutte le applicazioni in una soluzione è dire che tutte le applicazioni sono collegate in qualche modo. Se non lo sono, non metterli nella stessa soluzione.

Ciò che realmente cercate è il riutilizzo del codice. Dato che non si specifica uno stack tecnologico, elencherò alcune opzioni in più tecnologie. Questi ti permettono di condividere il codice senza riempire le applicazioni che a livello funzionale non appartengono:

Si arriva a creare, pacchettizzare e correttamente le librerie di classi della versione e gestirle come dipendenze negli altri progetti, ed è possibile creare i propri repository specifici della società privata in modo da non rendere pubblico il codice proprietario. Ora le tue soluzioni possono rimanere focalizzate sulla soluzione, piuttosto che sul modo migliore di riutilizzare il codice.

Quindi immagino che la mia risposta sia C) nessuna delle cose sopra.

    
risposta data 19.07.2016 - 17:58
fonte