Sobes.tech
Middle

O que é a modularidade no contexto do desenvolvimento de aplicações?

sobes.tech IA

Resposta da IA

A modularidade é uma abordagem arquitetónica na qual a aplicação é dividida em módulos pequenos e independentes. Cada módulo é responsável por uma funcionalidade ou camada específica da aplicação.

Vantagens da arquitetura modular:

  • Melhor organização do código: Partes logicamente relacionadas da aplicação são agrupadas em módulos separados, facilitando a navegação e compreensão da estrutura do projeto.
  • Aceleração da compilação: Alterações num módulo requerem recompilação apenas desse módulo e dos que dele dependem, não de todo o projeto.
  • Maior reutilização: Módulos que contêm funcionalidades comuns (por exemplo, componentes UI, utilitários) podem ser facilmente utilizados em diferentes partes da aplicação ou até em outros projetos.
  • Facilitação dos testes: Cada módulo pode ser testado de forma independente, o que simplifica a escrita e manutenção dos testes.
  • Melhor escalabilidade: A equipa pode trabalhar em diferentes módulos em paralelo, reduzindo o risco de conflitos.
  • Isolamento de dependências: Os módulos têm dependências explícitas entre si, tornando a estrutura da aplicação transparente e reduzindo o risco de alterações imprevistas.

Exemplos de tipos de módulos numa aplicação Android:

  • app (módulo principal da aplicação)
  • feature-login (módulo para funcionalidade de login)
  • feature-profile (módulo para o perfil do utilizador)
  • data (módulo para trabalhar com dados)
  • domain (módulo para lógica de negócio)
  • common-ui (módulo com componentes UI comuns)
  • utils (módulo com utilitários comuns)

Normalmente, os módulos são ligados através de dependências declaradas nos ficheiros build.gradle:

// build.gradle (Módulo: app)
dependencies {
    // Dependência do módulo raiz a outros módulos
    implementation project(':feature-login')
    implementation project(':feature-profile')
    implementation project(':data')
}
// build.gradle (Módulo: feature-login)
dependencies {
    // Dependência do módulo de funcionalidade aos módulos de dados e utilitários comuns
    implementation project(':data')
    implementation project(':utils')
}