exemplo de arquitetura de App baseado em microfrontend baseado em monolito,, monorepo e multirepo

Overview

PADRÕES E BOAS PRÁTICAS - FLUTTER

Versão 1.0

I - Introdução

O objetivo deste documento é definir e apresentar os padrões e melhores práticas do time de Flutter da ioasys. O objetivo é que este documento seja usado como guia para o desenvolvimento de projetos dentro da ioasys, estabelecendo de forma comum a todo time as práticas, metodologias, arquiteturas, padrões, frameworks etc. que podem/devem ser usados.

Este ponto é importante, pois uma vez que estabelecida uma "linguagem comum" entre todo o time, pontos como controle de qualidade, alinhamento técnico do time, manutenibilidade, etc. são favorecidos, por isso é de extrema importância contar com a colaboração de todos para que o que aqui estabelecido seja seguido.

Outro aspecto importante, o conteúdo deste guia não será estático, ou seja, podendo ser alterado a medida que novas tecnologias e necessidades surgirem, por isso o time de Android está sempre aberto a escutar propostas e melhorias que possam ser agregadas a este documento. Para tal basta editar este documento e submeter um pull request com alteração ou abrir uma issue neste repositório.

II - FVM

A Versão do flutter que é utilizada neste projeto foi a 2.12.1, este projeto utiliza do Flutter Version Management (FVM) para utiliza-lo é necessário ativa-lo pub global activate fvm troque o apontamento do PATH do flutter para C:\Users\Usuario\fvm\default\bin Agora dentro do projeto execute fvm install para instalar a verão. Agora será necessário configurar as preferencias do VS CODE aperte F1

Preferencias do VS CODE

Adicione o trecho abaixo a configuração

{
    ...
    "dart.flutterSdkPaths": [".fvm/flutter_sdk"]
}

Agora basta pressionar F1 e selecionar Flutter: Change SDK

Change SDK

e escolher a versão no projeto

setar versao

III - Apresentação geral da arquitetura

A arquitetura do projeto é dividia de forma modular subdividido em micro apps, onde tem o menor índice de acoplamento possível. Cada modulo contem seu próprio ecossistema de arquitetura e a proposta adotada foi a do clean dart. Veja a documentação sobre CLEAN aqui CleanDart

Propostas de arquitetura

Dependendo de cada projeto podemos ter estrutura de projetos diferentes podendo estar em

IV - Pull Requests

Veja a documentação sobre Pull Request aqui

V - Git Flow

Veja a documentação sobre Git Flow aqui

VI - Testes

Teste é algo de grande importância para garantir a qualidade dos projetos, com a implantação do Clean Dart facilita a criação dos testes

Estrutura de pastas

É importante e bastante eficaz que a estrutura de pastas do testes sigam a mesma estrutura do projeto Estrutura de pasta de testes

Given-When-Then (Dado-Quando-Então)

Given-When-Then

O conceito Given-When-Then visa criar um “template” usado em todo e qualquer tipo de documentação escrita. Este template terá sempre 3 palavras já definidas e obviamente nem preciso falar quais são. Veja um exemplo de documentação de requisito escrito neste template

Given - Dado

O Given é a parte que você define o cenário. Qual a situação atual? O que deve existir/acontecer de antemão para que o problema ou o requisito aconteça?

When - Quando

When é o “trigger” da situação. Quando o problema é percebido? Quando a nova funcionalidade é chamada?

Then - Então

Obviamente, o Then descreve a consequência do problema ou o resultado esperado do novo requisito

Exemplo

test('''
      Dado uma requisição para buscar empresas
      Quando retorno for sucesso
      Então deve retornar Lista de Empresas
''', () async {
}

Mocks

Para Mocks utilizaremos o mockito, na versão nova é a utilização do build_runner para geração das classes mockadas. Para isto basta adicionar a classe a ser mockada na annotation GenerateMocks.

@GenerateMocks([IEnterpriseDatasource])
void main() {
  late EnterpriseRepository _repository;
  final _datasource = MockIEnterpriseDatasource();

  setUp(() {
    _repository = EnterpriseRepository(_datasource);
  });

  group('Testes de sucesso', () {
    test('''
          Dado uma requisição para buscar empresas
          Quando retorno for sucesso
          Então deve retornar Lista de Empresas
    ''', () async {
      //prepare
      when(_datasource.get()).thenAnswer((_) async => <EnterpriseModel>[]);

      //execute
      final result = await _repository.get();

      // assert
      expect(result.fold(id, id), isA<List<EnterpriseEntity>>());
      verify(_datasource.get()).called(1);
      verifyNoMoreInteractions(_datasource);
    });
  });
}

Recursos de terceiros

É importante que o time esteja alinhado sobre quais recursos de terceiros (libraries, frameworks, SDK's) podem ser utilizadas nos projetos do time de flutter, uma vez que essas dependências podem ter um impacto significativo no desenvolvimento e manutenção de um projeto (depreciação, bugs em aberto, incompatibilidades etc.).

Antes de adicionar um recursos que não esteja na lista abaixo, observar os seguintes itens:

  • Issues abertas Github
  • Likes, Pub Points, Popularity
  • Data ultima alteração
  • Resolução de bugs encontrados
  • Atualização para recursos mais novos do Flutter/Dart, ex. Null Safety

Segue abaixo a lista dos recursos que podem ser utilizados:

VIII - Boas práticas de desenvolvimento

Para garantir que as boas práticas de desenvolvimento seguindo a guia oficial do Dart utilizamos o package Effective Dart Isso ira gerar Avisos de linhas que não condiz com as boas praticas do Flutter e com um link para a documentação oficial do Dart explicando como corrigi-lo

Warning com o problema de boa prática

Documentação oficial do Effective Dart

IX - Bibliografias

Abaixo há alguns links de documentações e artigos que possam ser consultados

You might also like...

This is an app created by me while undertaking an android app development in flutter course on Udemy.

Expense Planner App A Flutter project created by Mithilesh Ghadge in a Fluttter Android app development course on Udemy. Create a new Flutter project

Oct 14, 2021

A flutter based app using python scripts as backend for a quotes app.

A flutter based app using python scripts as backend for a quotes app.

Fluthon APP A new Flutter project which is supported from a python script and lists quotes . Deployment 📲 - /Script - python main.py. - Run main.d

Nov 16, 2022

This is a Flutter app which shows how to use the Reorderable List View in your app

reorderable_list_view A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you st

Oct 25, 2021

London App Brewery Dicee App

London App Brewery Dicee App

Dicee 🎲 Our Goal The objective of this tutorial is to introduce you to the core programming concepts that will form the foundation of most of the app

Nov 1, 2021

An app to help you build your vocabulary.This app contains 800+ curated GRE words

An app to help you build your vocabulary.This app contains 800+ curated GRE words

Vocabhub 0.3.5 A vocabulary app built with Flutter and Supabase, that is simple to use and available on multiple platforms with 800+ most common GRE w

Dec 21, 2022

This app is a minimal TodoList app that functions like a whiteboard. You can add new tasks, keep track of your tasks to make your day more productive, and then delete it after it is done.

My First Mobile App _ Minimal TodoList Flutter A new Flutter project. Getting Started This project is a starting point for a Flutter application. A fe

Nov 23, 2021

FoodReview is an app for restaurant review. This app is made for submission

FoodReview is an app for restaurant review. This app is made for submission

Food Rating App This app is called FoodReview. The main feature is we can discover some restaurants, get details, foods, drinks, and post a review for

Oct 26, 2022

Note app is open-source notes app for Android & ios. It is built with Dart on top of Google's Flutter Framework.

 Note app is open-source notes app for Android & ios. It is built with Dart on top of Google's Flutter Framework.

Note App ✍🏻 Note App & SqfLite &GetX [MVC pattern] 👨🏻‍💻 Note app is open-source notes app for Android & ios. It is built with Dart on top of Googl

Nov 29, 2022
Owner
Toshi Ossada
Toshi Ossada
CRUD + Listagem de produtos - Com gerênciamento de estado baseado em BloC

crud_bloc A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if thi

Ronald Tozzo Auler 1 Dec 22, 2021
Flutter Grocery Shopping App (Mobile App, Web App)

Grocery-App (Widle Studio - A Creative Flutter App Development Company) OR Get an Estimate Flutter Grocery Shopping App Fully Working Template with Wo

Widle Studio LLP 811 Dec 29, 2022
Flutter classified app - A sample app to showcase classified app using flutter

Flutter Classified App Demo A sample app to showcase classified app using flutter. Demo Android Screen iOS Screen Getting Started This project is a st

FlutterDevs 271 Dec 27, 2022
A Flutter app based on the design of the Social Media Integeration App

A Flutter app based on the design of the Social Media Integeration App

Achmad Rizki Nur Fauzie 2 Dec 8, 2021
Starter app for Flutter that includes many different production app features; some not typically included in demo apps.

first_app: Starter app for a Flutter production app Maintainer: Greger Wedel, https://github.com/gregertw Listed on: Latest build and artifacts: ** La

Greger Teigre Wedel 373 Jan 8, 2023
News Headline app is build in Flutter MVVM and REST Apis for News is used in this app.

About The Project Flutter MVVM project for News Headlines. REST Api for News is used in this project. App Demo Api for News Get free api from here : h

Aizaz ahmad 3 Aug 16, 2022
A flutter app for a wordpress websites with clean and elegant design. This app is available in free and pro version. You can choose to use the one you need.

?? Get Flutter for Wordpress Flutter for wordpress is currently available in free and pro version: Flutter for Wordpress Flutter for Wordpress Pro Bea

mcyos118 18 Dec 13, 2022
This is the my first App (Day 01 - 30 day everyday app challenge)

inspiration_app This My first app of the 30 Day everyday app challenge Instagram : https://www.instagram.com/deverflu/ Screen shot of the execution: S

Hamza ayach 1 Oct 20, 2021
Books App for App and Up recruitment :)

books A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if this is

null 1 Jan 16, 2022