Skip to content

Projeto criado em Flutter, seguindo os conceitos de Clean Architecture, Atomic Design e TDD. Um guia de builds para personagens do game League of Legends.

Notifications You must be signed in to change notification settings

viniciusamelio/riven

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Riven

Um simples guia de builds para League of Legends.

Objetivo

Esse projeto foi desenvolvido com o intuito de por em prática conceitos de TDD, Clean Architecture e Atomic Design.

Download

  • É válido lembrar que é necessário permitir a instalação de apps através do Google Drive, para instalar o apk
    Baixe aqui

Rift Crawler

  • Os dados usados no app foram coletados com outro projeto, o Rift Crawler, desenvolvido em Node com TypeScript, também desenvolvido para estudar a Clean Arch

O que utilizei/apliquei?

Ferramentas

  • FireStore: Banco de dados no-sql da Google
  • Lottie: Uso de animações de modo fácil
  • Kiwi: Containers para Injeção de Dependências
  • Github Workflows: Garantir a integridade do projeto de acordo com os commits

Conceitos/Princípios Gerais

  • Single Responsability Principle (SRP);

    • Motivo da utilização:
      • Mantém o código simples e de fácil compreensão, mantendo uma única responsabilidade no contexto de negócio.
  • Open Closed Principle (OCP);

    • Motivo de utilização:
      • Faz com que novas implementações não quebrem comportamentos pré-existentes da aplicação, aumentado a segurança e confiança no desenvolvimento de novas features e testes.
  • Dependency Inversion Principle (DIP);

    • Motivo de utilização:
      • Ajuda com a questão de acoplamento de código, fazendo com que módulos de alto nível não dependem de módulos de baixo nível
  • Don't Repeat Yourself (DRY);

    • Motivo de utilização:
      • Evita o retrabalho, produzindo códigos reutilizáveis
  • Modular Application Architecture;

    • Motivo de utilização:
      • Ajuda a separar o sistema em camadas, podendo ser de negócio ou features, por exemplo, fazendo com que o projeto se torne intuitivo e "vivo", com cada camada com uma responsabilidade específica
  • Test Driven Development;

    • Motivo de utilização:
      • Uma boa base de testes faz com que possíveis bugs sejam mapeados e corrigidos durante o desenvolvimento do app, mantendo o funcionamento sólido do sistema
  • Use Cases;

    • Motivo de utilização:
      • Separar as ações do sistema em casos isolados, nos dá um maior controle sobre as features, garantindo que a atomicidade do código
  • Clean Architecture;

    • Motivo de utilização:
      • Define claras responsabilidades para os elementos do projeto, compactuando bem com a ideia de um app com baixo acoplamento, priorizando o negócio e não a tecnologia

Padrões de projeto

  • Factory;
  • Adapter;
  • Observer;
  • Singleton;
  • Dependency Injection;
  • Atomic Design (front-end)

Gerência de estado

  • SetState
  • MobX

Testes

  • Unitários
  • Widget

Considerações finais

Tentei ao máximo seguir princípios SOLID e boas práticas dos conceitos aplicados e estudados aqui, porém, tenho ciência de que não segui a risca alguns deles, isso de deve ao fato de que acredito que devemos utilizar padrões, paradigmas e conceitos, a medida que eles nos ajudem e não nos tornem reféns deles. Um exemplo que posso citar é o Atomic Design, apliquei-o parcialmente, utilizando somente os conceitos de Molecules e Organisms, para não criar um código tão abstrato, a ponto de dificultar o entendimento do mesmo. Tendo isso em vista, concluo dizendo que cada padrão, conceito e paradigma aqui utilizado complementa um ao outro. E a maior lição tirada daqui é: Sempre tentar depender de abstrações, não de implementações

Getting Started with Flutter

About

Projeto criado em Flutter, seguindo os conceitos de Clean Architecture, Atomic Design e TDD. Um guia de builds para personagens do game League of Legends.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages