Skip to content

Weather App using Clean Architecture conceps and BLoC Pattern

Notifications You must be signed in to change notification settings

vagnereix/weather_app_bloc_clean_arch

Repository files navigation

Weather App — Clean Architecture and BLoC Pattern

Loading state Home Screen

Estrutura de pastas

  • lib — principais camadas e arquivos do app.

    • core — arquivos core ou comuns da aplicação, exceções, componentes genéricos e utilitários disponibilizados para todo o app.

      • errors — tratamento de exceções.
      • usecases — contratos de casos de uso.
      • utils — utilitários do app.
      • view — tema padrão e widgets utilizadas por mais de uma feature por exemplo.
    • modules — módulos ou features da aplicação como auth, home ou splash por exemplo.

      • weather

        • core — camada de domínio da feature.

          • entities — responsável por estruturar os modelos de dados principais do app.
          • repositories — responsável por definir contratos entre a camada domínio e a camada de data — ajudam a aplicar o princípio DIP do SOLID.
          • usecases — representam a lógica de negócio do app com foco em uma única responsabilidade (dependem da utilização dos repositories e chamam seus métodos) — aplicam o princípio SRP do SOLID.
        • data — camada responsável por buscar dados externos seguindo os contratos da camada de domínio.

          • datasources — implementam as interfaces definidas para os repositories na camada de domínio e são responsáveis por prover dados de fontes externas como API's ou databases, onde podem depender de algum adapter para isso — promovem modularidade e ajudam a aplicar o princípio DIP do SOLID.
          • models — são subclasses das entidades que tratam implementam os JSON Serialization methods, transformando dados entre entidades de data sources — ajudam a aplicar o princípio OCP do SOLID.
          • repositories — implementam os contratos ou interfaces definidas na camada de domínio, tratando erros e interagindo com os datasources para recuperar dados.
        • view — responsável por apresentar e interpretar informações e ações do usuário

          • blocBLoc Pattern, gerencia os estados das telas e suas regras de negócio dependendo dos usecases para executar operações lógicas.
          • screens — tela(s) necessárias para a feature que escutam eventos do BLoC e reagem a suas alterações atualizando a UI de acordo.
          • widgets — componentes reutilizáveis entre as telas.
  • app_module.dart — responsável pela injeção de dependências através do Provider para disponibilizar dependências a diferentes camadas do app — ajuda a gerenciar as dependências e permite um easy swapping de implementações.

  • test — camada de testes seguindo a mesma estrutura da lib.

Legenda

  • SOLID
    • SRP — Single Responsibility Principle (Princípio da responsabilidade única);
    • OCP — Open-Closed Principle (Princípio Aberto-Fechado);
    • LSP — Liskov Substitution Principle (Princípio da substituição de Liskov);
    • ISP — Interface Segregation Principle (Princípio da Segregação da Interface);
    • DIP — Dependency Inversion Principle (Princípio da inversão da dependência);
  • BLoC Pattern
    • O Bloc Pattern é um padrão de design de software que ajuda a separar a lógica de negócios da apresentação (view) em aplicativos móveis. Ele permite que os desenvolvedores gerenciem eficientemente e convenientemente o estado em seus aplicativos sem um acoplamento rígido entre a apresentação e a lógica. Ele também visa a reutilização da mesma lógica em vários widgets.

Dependências

Como executar

$ git clone git@github.com:vagnereix/weather_app_bloc_clean_arch.git
$ cd weather_app_bloc_clean_arch
$ code . # ou abra com sua IDE preferida

# setup your API_KEY from https://openweathermap.org/api
# on lib/core/utils/constants.dart

$ flutter pub get
$ flutter run lib/main.dart # ou utilize sua IDE para iniciar

About

Weather App using Clean Architecture conceps and BLoC Pattern

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published