2013-03-05 18 views
5

Alcuni retroscena primoCompositore suggerito approccio per i pacchetti interni

La nostra azienda, una piccola startup con solo quattro sviluppatori, sta iniziando il refactoring dei nostri prodotti in moduli riutilizzabili per semplificare il processo di sviluppo, aumentare la produttività e, insieme A proposito, vorremmo introdurre dei test unitari dove si adatta.

Come al solito in una piccola startup, non possiamo permetterci di sprecare troppo tempo di sviluppo ma, come vediamo, questo è estremamente importante per il successo della nostra azienda a medio e lungo termine.

Attualmente, abbiamo due prodotti per l'utente finale. Entrambe sono applicazioni Laravel (PHP) basate sul nostro livello aziendale interno, composte principalmente da servizi Web, apis riposante e un enorme database.

Questo livello aziendale fornisce la maggior parte dei dati per questi prodotti, ma ognuno di essi ne fa un uso completamente diverso. Abbiamo in programma di costruire altri prodotti nel prossimo futuro oltre a mantenere e migliorare quei due che sono quasi finiti.

Perché ciò accada, intendiamo astratta logica comune di coloro (e futuro) prodotti in moduli riutilizzabili e disaccoppiati. La scelta più ovvia sembra essere il compositore, anche con la nostra poca conoscenza a riguardo.

Ora per la vera domanda

vorrei chiedere altri pareri su come sviluppare pacchetti interni su un test driven moda. Ogni modulo dovrebbe essere un pacchetto di compositore con i propri test di unità e richiedere le sue dipendenze, oppure dovremmo creare un singolo pacchetto con ogni modulo nominato nello spazio?

Per chiarire un po ', ci piacerebbe avere, ad esempio, un modulo CurlWrapper e che sarebbe richiesto sul nostro modulo InternalWebserviceAPI (e pochi altri).

Personalmente mi piace l'idea di avere pacchetti completamente separati per ogni modulo e di dichiarare dipendenze su composer.json, che implementerebbe mentalmente il disaccoppiamento e ci permetterebbe di pubblicare alcuni di questi pacchetti come opensource un giorno. Può anche semplificare le modifiche di rottura su quei moduli perché potremmo congelare la sua versione sui dipendenti che dovranno essere aggiornati.

Anche se, penso che questa separazione potrebbe aggiungere molta complessità e potrebbe essere più difficile da mantenere e testare, dal momento che ogni modulo dovrebbe essere un progetto a se stante e non abbiamo tutto quel potere umano da mantenere traccia di tanti piccoli progetti.

È davvero Composer la soluzione ideale per il nostro problema? In tal caso, quale consiglio: pacchetto singolo o più pacchetti?

Edit 1:

vorrei far notare che la maggior parte di questi moduli stanno per essere:

  • librerie (vale a dire ottenere un ID da un URL di YouTube o la conversione risale al " x secondi fa ")
  • wrapper (come un involucro CURL chainable)
  • Facciate (dei nostri molteplici servizi web, quelli richiedono gli altri due generi)
+0

Attualmente sto pensando a un modello simile da adottare per un progetto. Le domande che ho sono le stesse, quindi mi piacerebbe sapere come hai fatto a farlo. Soluzione ideale Vorrei che Wouter abbia menzionato qui di seguito, ma come sapete aggiunge uno strato di complessità quando si tratta del bit di integrazione. Ma è un'architettura sonora a lungo termine. Anche se il trade off sarebbe il momento degli sviluppatori, poiché ciò richiederebbe un po 'di tempo. –

risposta

2

Sì, il compositore è la strada da percorrere e ti consiglio di utilizzare singoli pacchetti.

Non sai quando hai bisogno di questi moduli. È meglio creare molti singoli pacchetti ed essere in grado di includerli tutti (o uno solo), piuttosto che creare grandi pacchetti e aver bisogno di dedicare più tempo a rompere un pacchetto in più quando hai bisogno di alcune classi da esso.

Ad esempio, vedere il progetto Symfony2. Si tratta di molti componenti che sono tutti necessari per il framework Symfony2 full-stack, ma è anche possibile utilizzare alcuni componenti nel proprio progetto (come sta facendo Drupal8). Inoltre, Symfony2 ottiene sempre più pacchetti, sembra così utile avere piccoli pacchetti che le persone impiegano tempo a rompere alcuni grandi pacchetti in pezzi.

+0

Grazie per la tua risposta, Wouter. In effetti le architetture di Symfony e Laravel erano i principali motivatori del nostro dubbio, sono state progettate pensando a pacchetti modulari, che funzionano abbastanza bene, ma sono mantenute non solo dagli sviluppatori dedicati, ma da un'intera comunità. O il timore principale è che questa architettura possa essere eccessiva e consumare troppo tempo di manutenzione del nostro piccolo team diviso tra questi prodotti e i servizi sottostanti che forniscono i dati per loro. – vFragosop

1

Un'alternativa all'utilizzo di singoli pacchetti: utilizzare separate composer.json files per ciascun sottoprogetto.

Questo ha il vantaggio di consentire di mantenere tutte le librerie nello stesso repository. Durante il refactoring del codice, puoi anche eseguire il partizionamento del caricamento automatico e delle dipendenze tramite la libreria secondaria.

Se si arriva al punto in cui si desidera estrarre la libreria nel proprio pacchetto con versione, è possibile eseguire il passaggio finale e controllarlo nel proprio repository.

+0

Questa risposta sembra fuorviante: il collegamento punta alla documentazione su come includere configurazioni di repository, non più composer.json - file. – joerx

Problemi correlati