Tecnologias e Arquitetura

Solução

A arquitetura da solução é composta por duas seções principais: frontend e backend. A primeira contempla a interface do aplicativo de dispositivo móvel, onde o usuário irá interagir, concluindo os exercícios propostos, consultando suas pontuações, entre outras ações. O backend por sua vez é responsável por receber, tratar, e enviar os dados gerados e consumidos pela interação do usuário com ofrontend.

A partir desta definição, foi modelada a seguinte arquitetura para a solução do projeto:

Frontend

A arquitetura escolhida para modelar o a estrutura do frontent foi a arquitetura BLoC (Business Logic Component). Este padrão foi apresentado em 2018 no evento DartConf e possui o objetivo de segmentar as lógicas de negócio da interface do usuário através de um gerenciador de estados que seja facilmente reutilizável.

Este modelo é separado em 5 unidades básicas: BLoC, Eventos, Estados, UI, Requester.

    Podemos modelar esta arquitetura da seguinte maneira:


Backend

Foi definido o modelo de arquitetura MVCS para estruturar o backend. Este modelo consiste na criação de quatro componentes base: Model, View, Controller e Service. O MVCS permite uma separação clara entre as camadas controladora e regras de negócio, deste modo se torna simples e coerente a integração com a arquitetura BLoC. Além disto alterações na camada controladora não afetam as camadas de negócio, blindando a modelagem e as regras de negócio já definidas que não devem ser alterados conforme a expansão do projeto. A figura é um diagrama que apresenta a troca de informações entre as quatro camadas do MVCS.

Infraestrutura

Para manter o projeto na nuvem, foi selecionado o serviço de hospedagem da AWS, especificamente o Elastic Beanstalk em conjunto com o RDS. A escolha se deve a simplicidade e baixo custo de deploy pelo uso dessas ferramentas, além de prover maior escalabilidade do projeto em futuras iterações dele. Outro ponto a se destacar é que a abordagen de desenvolvimento dessas ferramentas se assemelha ao do Spring Boot, considerando convenção acima de configuração, mas ainda mantendo possibilidade de fazer ajustes caso necessário, o que torna o par perfeito para o desenvolvimento.