Flutter - Clean Architecture & TDD

Overview

Flutter - Clean Architecture & TDD

Linkedin Badge visitors

Introducción

Este proyecto consta de una aplicación móvil desarrollada en Flutter, la cual muestra información acerca de películas haciendo consultas a la API de themoviedb.org.

Tabla De Contenidos

  1. Introducción
  2. Objetivos
  3. Vista Previa
  4. Instalación Proyecto
  5. Estructura Del Proyecto
  6. Arquitectura Limpia (Clean Architecture)
  7. Flujo De Trabajo (Workflow)
  8. TDD
  9. Testeo Unitario En Flutter (Unit Testing)

Objetivos

  • Se tiene como objetivo practicar, compartir y discutir los temas aprendidos en el blog de Resocoder.
  • Consumir toda la API de themoviedb.org.

Vista Previa

Instalación Proyecto

Estructura Del Proyecto

├─ core/                       NÚCLEO
│  ├─ api/                     definición de elementos asociados a la API
│  ├─ errors/                  definición de errores y excepciones
│  ├─ network/                 utils asociados a la conexión de internet
│  ├─ usecases/                definición de los casos de uso
│  └─ routes.dart              rutas de nuestro proyecto
│
├─ data/                       CAPA DE DATOS
│  ├─ datasources/             origen de los datos solicitados por el repositorio
│  ├─ models/                  contienen funciones fromJson & toJson y heredan de una entidad
│  └─ repositories             implementación de los repositorios
│
├─ domain/                     CAPA DE DOMINIO
│  ├─ entities/                entidades
│  ├─ repositories/            definición de los repositorios
│  └─ usecases/                implementación de los casos de uso
│
├─ presentation/               CAPA DE PRESENTACIÓN
│  ├─ business_logic/          gestor de estados
│  ├─ views/                   vistas
│  └─ widgets/                 widgets personalizados utilizados en las vistas
│
├─ injection_container.dart    inyección de dependencias
└─ main.dart

Arquitectura Limpia (Clean Architecture)

Propuesta por Robert C. Martin.

La idea principal en la arquitectura limpia es separar el código en capas independientes, las cuales se vuelven más abstractas cuando se avanza a las capas interiores.

Porque las capas interiores representan reglas que restringen a las capas exteriores, lo que vendría siendo la regla dependencia (Las capas exteriores pueden depender de las interiores, pero no al revés).

La idea sería tener los requerimientos definidos, además de las entidades y casos de uso que contendrá nuestro proyecto. Teniendo estas reglas claras, se pueden escribir aquellos mecanismos que son necesarios para que el caso de uso sea bien ejecutado.

Flujo De Trabajo (Workflow)

El usuario interactúa con las vistas gatillando eventos, los que al ser escuchados por nuestro gestor de estados, genera un nuevo flujo de estados; éstos las pueden mutar para indicar en que etapa del proceso está y así permite desarrollar un caso de uso.

Capa de Presentación

Los widgets componen nuestras vistas y necesitan una gestión de estados para mutar según se requiera durante la vida de la aplicación.

En esta ocasión se utilizó flutter_bloc.

Capa de dominio

Como se ve en la imagen, el repositorio pertenece tanto a la capa de datos como a la de dominio, con la gran diferencia que, en la capa de dominio sólo están las definiciones abstractas de éste y en la capa de datos estaría la implementación.

Así se dependerá de un "contrato" definido en la capa de dominio, que deberá ser cumplido en la capa de datos.

Capa de datos

Consta de una implementación de los repositorios y fuentes de datos: remoto (API) y local (CACHE).

En el repositorio se decide si devolver datos desde la api o aquellos almacenados en cache y cuando almacenarlos.

En esta capa no se trabaja con entidades, se trabaja con modelos, éstos heredan de una entidad y tienen métodos toJson y fromJson, se obtiene el beneficio, por si en algún futuro se decide cambiar de json a xml, sin tener demasiados quebraderos de cabeza.

TDD

Test Driven Development: es un proceso de desarrollo iterativo, donde el desarrollador escribe una prueba antes de escribir el código suficiente para cumplirla y luego refactoriza si es necesario.

Las ventajas de este proceso es que el desarrollador se centra m√°s en los requisitos del software, preguntándose el por qué necesita la fracción de código que está punto de escribir, antes de continuar con la implementación.

Mediante este proceso el desarrollador puede identificar requisitos mal definidos y mejorar sus hábitos con el tiempo, lo que conducir√≠a a una mejora en su calidad de código.

You might also like...

clean architecture and clean code with flutter , with bloc and getx state managment .

example_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

Aug 22, 2022

Flutter Architecture inspired by Domain Driven Design, Onion and Clean Architecture

Flutter Architecture inspired by Domain Driven Design, Onion and Clean Architecture

Inspiring Domain Driven Design Flutter Architecture Please take a look at my slides to learn more Strategic Domain Driven Design For Improving Flutter

Dec 25, 2022

Proyect with Clean Architecture / Hexagonal Architecture - Patron BLoC - The MovieDB API

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

Sep 22, 2022

Flutter mvvm archi - Flutter Advanced Course - Clean Architecture With MVVM

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

Jan 8, 2022

[Flutter SDK V.2] - Youtube Video is a Flutter application built to demonstrate the use of Modern development tools with best practices implementation like Clean Architecture, Modularization, Dependency Injection, BLoC, etc.

[Flutter SDK V.2] - Youtube Video is a Flutter application built to demonstrate the use of Modern development tools with best practices implementation like Clean Architecture, Modularization, Dependency Injection, BLoC, etc.

[Flutter SDK V.2] - Youtube Video is a Flutter application built to demonstrate the use of Modern development tools with best practices implementation like Clean Architecture, Modularization, Dependency Injection, BLoC, etc.

Jan 2, 2023

🚀 Sample Flutter Clean Architecture on Rorty App focused on the scalability, testability and maintainability written in Dart, following best practices using Flutter.

🚀 Sample Flutter Clean Architecture on Rorty App focused on the scalability, testability and maintainability written in Dart, following best practices using Flutter.

Rorty Flutter Rorty 📺 (work-in-progress for V2 👷 🔧️ 👷‍♀️ ⛏ ) Getting Started Flutter Clean Architecture in Rorty is a sample project that presents

Jan 1, 2023

Starting template for a new Flutter project. Using clean architecture + Riverpod.

flutter_project_template_riverpod Installation Add Flutter to your machine Open this project folder with Terminal/CMD Ensure there's no cache/build le

Dec 27, 2022

A fully functional Movies Application built with Flutter. The application built with null safety and clean architecture, also uses OMDB API for fetching movies in the search item

A fully functional Movies Application built with Flutter. The application built with null safety and clean architecture, also uses OMDB API for fetching movies in the search item

Cinema DB Project Details This project uses null safety feature Project uses clean code architecture (Uncle Bob's Architecture) Project can run on bot

Oct 1, 2022

Flutter starter project - boilerPlate for Clean Architecture with Domain-Driven-Design with commonly used dependencies

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

Jan 2, 2022
Owner
Jorge Fernández
Estudiante de Ingenieria Civil Telemática | UTFSM
Jorge Fernández
Flutter - Clean Architecture & TDD

Flutter - Clean Architecture & TDD Introducción Este proyecto consta de una aplicación móvil desarrollada en Flutter, la cual muestra información acer

Jorge Fernández 21 Oct 26, 2022
Flutterstarterproject - Clean Architecture Flutter starter project, using tdd + bloc

Flutter Starter Project Generated by the Nero Lab CLI ?? A Nero Lab Project crea

Muhammad Noerhidayatullah 12 Dec 8, 2022
Flutter, Dart, TDD, Clean Architecture, SOLID e GetX

cep_search_clean_architecture A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to ge

Jadiel Santana 3 Feb 22, 2022
Flutter auth app with TDD Clean Architecture

Flutter App Auth ?? This is App with Auth Function like Login and Register. All API using reqres.in. This app also implementing Flutter Clean Architec

LazyCat Labs 73 Dec 29, 2022
Random Users app, developed with Flutter and using Clean Architecture, BLoC, TDD and Functional Programming.

random_users This project is a sample of how to build a Flutter application using de benefits of Clean Architecture, TDD and Functional Programming. G

Yago Nunes 3 Jul 21, 2022
Made with Clean architecture + TDD + GraphQL + flutter_bloc + CodeCov + GitHooks + GitHub Actions (CI/CD) and finally with 💙

Rick and Morty Info A simple app to demonstrate Clean Architecture with GraphQL and flutter_bloc Motivation In Martin Fowler's words, “Any fool can wr

Venkatesh Prasad 473 Dec 25, 2022
Clean Architecture Project with TDD Approach

Clean-Architecture-Project-with-TDD-Approach Small project to implement TDD(Testing Driven Development) by applying SOLID and YAGNI and rules(Clean Ar

null 7 Jun 24, 2022
Clean Architecture + TDD + SOLID + Dependency Injection + GitFlow + Mobx

Clean Architecture + TDD + SOLID + Dependency Injection + GitFlow + Mobx Flutter Interview Challenge This app is part of an interview process. It took

Vinicius Souza 13 Dec 28, 2022
Ouday 25 Dec 15, 2022
Flutter boilerplate with TDD architecture

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

Dao Hong Vinh 6 May 25, 2022