Ho una libreria Android utilizzata da una discreta quantità di persone, chiamiamola libreria A.
Sto costruendo una seconda libreria, la biblioteca B.
Le due librerie sono concettualmente correlate, risolvono diversi problemi nello stesso dominio. È probabile che le due librerie verranno utilizzate insieme, ma non è obbligatorio.
Il problema: la libreria A contiene alcune classi e interfacce che vorrei riutilizzare nella libreria B.
Ci sono delle buone pratiche su come farlo? Questa è la prima volta che incontro questo problema e, essendo le librerie usate da altre persone, vorrei implementare la soluzione che ha più senso.
Posso vedere tre approcci:
- Copia e incolla le interfacce e le classi che voglio riutilizzare, dalla libreria A alla libreria B.
- Importa libreria A nella libreria B.
- Estrarre dalla libreria A le interfacce e le classi che voglio riutilizzare, pubblicarle sotto una nuova libreria CORE e importare la libreria CORE sia nella libreria A che nella libreria B.
Ci sono altri possibili approcci che non sto considerando?
Problemi che riesco a vedere con queste soluzioni:
- Questa è la soluzione peggiore. Non segue il principio DRY e, cosa più importante, un utente di entrambe le librerie finirebbe per avere interfacce come:
com.libraryA.Interface1
ecom.libraryB.Interface1
. Ciò non consente un'interazione piacevole tra le librerie A e B. - La libreria B importerebbe un mucchio di codice che non ha bisogno. Soprattutto, gli utenti della libreria B dovrebbero sempre importare la libreria A, a causa delle interfacce condivise da A a B.
- Questa sembra la soluzione più elegante, ma come dovrei gestire il controllo delle versioni in questa situazione? Sarà sempre richiesta la libreria A, B e CORE per avere lo stesso numero di versione? In caso contrario, avrebbe senso avere numeri di versione diversi per A, B e CORE? Le modifiche al CORE influenzano sia A che B e richiedono un bump di versione su tutti e tre. Le modifiche su A e B verrebbero isolate.
Ci sono altri problemi che non vedo?