GithubHelp home page GithubHelp logo

botiblog's Introduction

BotiBlog

O microblog do Boticário: veja nossas novidades e compartilhe as suas!

BotiBlog screenshots

Utilizando o app

Para utilizar o BotiBlog, siga os passos abaixo:

  1. No diretório do projeto, rode flutter run após conectar um dispositivo ou rodar um emulador/simulador. Alternativamente, instale o arquivo /dist/boti_blog.apk e execute o app em um dispositivo Android.

  2. Na tela que será exibida após a splashscreen, cadastre um novo usuário tocando em "Quero fazer parte!" ou forneça os dados do usuário pré-cadastrado:

e-mail: [email protected]

senha: 1234

O código foi desenvolvido em Flutter 1.22.2, com VS Code 1.50.1, e testado em dispositivos Android e simulador iOS.

A arquitetura da solução

O app foi construído valendo-se de uma arquitetura em camadas, baseada em interfaces. Dessa forma, as dependências entre classes são expressas em termos de interfaces (na verdade, classes abstratas do Dart), ao invés das implementações concretas. Essas implementações são injetadas em um ponto específico do app (vide main.dart), o que facilita sua substituição sem que seja necessário alterar outras partes do código - e também auxilia muito na elaboração de testes unitários.

O gerenciamento de estado nas telas utiliza MobX. As Pages (widgets que estão no topo da hierarquia de UI) são controladas por estados; alterações de estado fazem com que a tela seja alterada de acordo (deixando de exibir um indicativo de carregamento de lista e passando a exibir a lista de novidades, por exemplo).

O código seguiu os princípios SOLID, com o objetivo de tornar a solução flexível e facilitar sua manutenção.

Estrutura do código

O código-fonte em /lib está organizado da seguinte forma:

  • /business/<funcionalidade>: lógica de negócio e classes relacionadas a uma funcionalidade específica

    • /model: os modelos utilizados na funcionalidade;
    • /state: os estados envolvidos na funcionalidade (sucesso, erro etc);
    • /store: as stores do MobX que lidam com lógica de negócio.
  • /common: classes utilizadas em múltiplas funcionalidades

  • /infrastructure: classes de fronteira, responsáveis por interagir com recursos externos (nesse desafio, responsáveis pela obtenção das novidades, obtenção e gerenciamento de posts)

  • /ui: classes relacionadas à interface com o usuário (UI)

    • /pages: as telas (Pages) do app;
    • /widgets: os widgets que compõe as pages.

Algumas classes são abstratas e suas implementações concretas estão no sub-pacote "implementation", no diretório que as contêm.

Minimizando dependência com bibliotecas

A solução foi construída de modo a centralizar, em poucas classes, a dependência com bibliotecas externas.

Um exemplo é o próprio MobX, presente apenas nas Stores e na superclasse utilizada no estado das páginas (PageState).

Testes unitários

A arquitetura foi pensada de modo a facilitar a elaboração de testes unitários. Desse modo, foi possível elaborar testes para as principais classes envolvidas na solução, inclusive aquelas responsáveis pela interface com o usuário.

Os testes unitários estão no diretório /test. A estrutura desse diretório é similar à encontrada em /lib.

Em /test/util, estão presentes objetos e classes utilizados em todos os testes para:

  • injeção de dependências
  • criação de dublês de teste (mocks e stubs)
  • massa de teste

Os testes unitários podem ser executados rodando flutter test no diretório do projeto.

botiblog's People

Contributors

maporcho avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.