Skip to content

Porque tantos módulos no projeto?

Gabriel Bronzatti Moro edited this page Oct 22, 2023 · 1 revision

Arquitetura

Pessoal, a ideia dessa página é apresentar um pouco sobre a arquitetura do StreamPlayerApp. Como vocês já sabem, nosso projeto é multi-modular (vários módulos). Você deve estar se perguntando 🤔:

  • Mas como esses módulos se comunicam entre si?

  • Qual é a responsabilidade de cada módulo?

  • Qual é a vantagem da arquitetura multi-modular?

Se você quer essas respostas, leia essa página até o final! 🤗

Nomenclaturas Essenciais

Core

  • Nome dado para funcionalidades base, compartilhadas entre toda a aplicação.

  • Por exemplo, o core-shared-ui é um módulo que define recursos compartilhados de UI, caso você tenha um componente de botão ⏏️ que se repete em várias telas, esse componente é um candidato a fazer parte desse módulo 💡.

Feature

  • Nome dado para funcionalidades de negócio.

  • Por exemplo, o feature_list-streams é um módulo que define a funcionalidade específica de listar streams.

Comunicação entre os Módulos

Perspectiva Multi-módulo

Conforme o diagrama acima, podemos ver: grupo de módulos do tipo core, grupo de módulos do tipo features e o módulo app.

Grupo Core

O grupo core agrupa todos os módulos de tipo core, eles podem ser utilizados por qualquer módulo da aplicação. No diagrama percebemos que o módulo principal da aplicação (app) depende desse grupo de módulos, como também o grupo de módulos feature.

Grupo Feature

O grupo feature agrupa todos os módulos de tipo feature, eles dependem do módulo core. É importante aqui perceber que, o módulo feature não conhece o módulo app.

Módulo App

Esse é o módulo principal da nossa aplicação, nele o fluxo inicia. Ele depende do grupo de módulos feature, ele é um indexador de features, responsável por juntar todas elas 🤤 (sem ele nada funciona). Além disso, esse módulo pode também precisar de códigos comuns, os quais são encontrados nos módulos de tipo core.

Escolha por uma Arquitetura Multi-modular

Nós escolhemos a arquitetura multi-modular, pelos seguintes motivos:

  • Possibilita o crescimento do projeto de forma escalável, cada módulo possui uma responsabilidade definida, o que ajuda a comunidade na hora de criar features 📦 e resolver bugs 🐛;

  • Próximo do que vemos na indústria de software hoje 🏗️;

  • Oportunidade de ter contato com problemáticas como: compartilhamento de dependências, build-logic, cobertura de testes e outras que são bem comuns ao cenário de Arquiteturas Multi-Modulares.

Clone this wiki locally