Un progetto con più moduli Gradle è noto come progetto con più moduli. Questa guida contiene best practice e pattern consigliati per lo sviluppo di app per Android con più moduli.
Il crescente codebase
In un codebase in costante aumento, la scalabilità, la leggibilità e la qualità complessiva del codice spesso riducono il tempo. Ciò avviene come risultato dell'aumento delle dimensioni del codebase senza che i suoi responsabili adottino misure attive per applicare una struttura facilmente gestibile. La modularizzazione è un mezzo per strutturare il codebase in modo da migliorare la manutenibilità e aiutare a evitare questi problemi.
Cos'è la modularizzazione?
La modularizzazione è una pratica di organizzare un codebase in parti a basso accoppiamento e autocontenenti. Ogni parte è un modulo. Ogni modulo è indipendente e ha una finalità precisa. Suddividendo un problema in sottoproblemi più piccoli e facili da risolvere, si riduce la complessità della progettazione e della gestione di un sistema di grandi dimensioni.

Vantaggi della modularizzazione
I vantaggi della modularizzazione sono molti, ma ognuno è incentrato sul miglioramento della manutenibilità e della qualità complessiva di un codebase. La tabella riportata di seguito riassume i vantaggi principali.
Vantaggio | Riepilogo |
---|---|
Riutilizzabilità | La modularizzazione offre opportunità per la condivisione del codice e la creazione di più app dalla stessa base. I moduli sono componenti di base efficaci. Le app devono essere una somma delle loro funzionalità, in cui sono organizzate in moduli separati. La funzionalità fornita da un determinato modulo può essere o meno abilitata in una determinata app. Ad esempio, un :feature:news può essere parte dell'app versione completa e Wear, ma non parte della versione demo. |
Controllo rigoroso della visibilità | I moduli ti consentono di controllare facilmente ciò che mostri ad altre parti del tuo codebase. Puoi contrassegnare tutto tranne la tua interfaccia pubblica come internal o private per evitare che venga utilizzato al di fuori del modulo. |
Pubblicazione personalizzabile | Play Feature Delivery utilizza le funzionalità avanzate degli app bundle, consentendoti di offrire determinate funzionalità della tua app in modo condizionale o on demand. |
I vantaggi di cui sopra sono realizzabili solo con un codebase modularizzato. I seguenti vantaggi potrebbero essere ottenuti con altre tecniche, ma la modularizzazione può aiutarti a applicarli ancora di più.
Vantaggio | Riepilogo |
---|---|
Scalabilità | In un codebase a basso accoppiamento, una singola modifica può attivare una cascata di alterazioni in parti di codice apparentemente non correlate. Un progetto adeguatamente modularizzato abbraccia il principio della separazione dei problemi e, di conseguenza, limita l'accoppiamento. Ciò consente ai collaboratori di usufruire di una maggiore autonomia. |
Proprietà | Oltre ad abilitare l'autonomia, i moduli possono essere utilizzati anche per imporre la responsabilità. Un modulo può avere un proprietario dedicato che è responsabile della manutenzione del codice, della correzione dei bug, dell'aggiunta di test e della revisione delle modifiche. |
Incapsulamento | L'incapsulamento significa che ogni parte del tuo codice deve avere la minima conoscenza possibile di altre parti. Il codice isolato è più facile da leggere e da capire. |
Testabilità | La verificabilità determina il grado di facilità di test del codice. Si tratta di un codice testabile in cui i componenti possono essere facilmente testati in modo isolato. |
Ora build | Alcune funzionalità di Gradle, come la build incrementale, la cache di build o la build parallela, possono sfruttare la modularità per migliorare le prestazioni della build. |
Errori comuni
La granularità del codebase è la misura in cui è composta da moduli. Un codebase più granulare ha più moduli più piccoli. Quando progetti un codebase modularizzato, devi decidere un livello di granularità. A questo scopo, tieni conto delle dimensioni del codebase e della relativa complessità. Una gestione troppo granulare renderà gravosa l'overhead e un approccio troppo grossolano ridurrà i vantaggi della modularizzazione.
Alcuni errori comuni sono i seguenti:
- Troppo granulare: ogni modulo comporta un certo sovraccarico, sotto forma di maggiore complessità di build e di codice code. Una configurazione di build complessa rende difficile mantenere la coerenza delle configurazioni tra i moduli. Troppi codici boilerplate generano un codebase macchiato, difficile da gestire. Se l'overhead ostacola i miglioramenti della scalabilità, consigliamo di consolidare alcuni moduli.
- Troppo granulare: al contrario, se i moduli sono troppo grandi, potresti ritrovarsi con un altro monolite e perdere i vantaggi che la modularità offre. Ad esempio, in un piccolo progetto va inserito il livello dati all'interno di un singolo modulo. Ma con la crescita, potrebbe essere necessario separare i repository e le origini dati in moduli autonomi.
- Complesso troppo complesso: non ha sempre senso modularizzare il progetto. Un fattore dominante è la dimensione del codebase. Se non prevedi che il tuo progetto aumenti oltre una determinata soglia, i risultati relativi a scalabilità e tempo di creazione non verranno applicati.
La modularizzazione è la tecnica giusta per me?
Se hai bisogno dei vantaggi di riutilizzabilità, controllo rigoroso della visibilità o dell'utilizzo di Play Feature Delivery, la modularizzazione è una necessità per te. Se non lo fai, ma vuoi comunque trarre vantaggio da una migliore scalabilità, proprietà, incapsulamento o tempi di creazione, la modularizzazione è un aspetto che dovresti considerare.
Samples
- Ora in Android: app per Android completamente funzionale con modularizzazione.
- Esempio di architettura con più moduli