CLÊRTON LEAL
QUEM SOU EU
▸ Clêrton Leal
▸ Nascido e criado na cidade de Fortaleza
▸ Trabalhando como consultor para a Avenue Code de Belo Horizonte
▸ Morando em BH a pouco mais de 6 meses =)
ARQUITETURA DE
SOFTWARE
O QUE VAMOS VER HOJE?
▸ Arquitetura padrão para aplicações Android (Ou a falta dela)
▸ Model-View-Presenter - MVP
▸ Model-View-ViewModel - MVVM
▸ DataBinding Library by Google
▸ Testabilidade
TESTES!!!!
ARQUITETURA DE
SOFTWARE
“UM PADRÃO ARQUITETURAL É UMA SOLUÇÃO
GERAL E REUSAVEL PARA UM PROBLEMA
RECORRENTE EM DESENVOLVIMENTO DE
SOFTWARE"
Arquitetura para aplicações Android. Do MVP ao MVVM.
QUAIS OS PROBLEMAS
RECORRENTES AO CONSTRUIR UM
APP ANDROID?????
VAMOS ANALISAR A
ESTRUTURA DE UMA ACTIVITY
Activity
-> UI
-> Lógica de apresentação
-> Requisições de Rede
-> Regras de negócio
-> Outras bagunças incompreensíveis
Deus do código Macarrônico
Primeiro engenheiro Android
PROBLEMAS EM APPS ANDROID
▸ Muito Difícil de testar
▸ Difícil de entender o código gerado
▸ Dificuldade de manutenção
▸ Falta de confiabilidade de software
BENEFICIOS DE UMA ARQUITETURA FORTE
▸ Código legível e de fácil entendimento
▸ Fácil de escalar
▸ Fácil de testar <3
▸ Fácil de corrigir bugs (Tudo está no seu devido lugar)
▸ Redução de riscos técnicos
MORTE
A
ACTIVITY
GOD
TEMOS DE IMPLEMENTAR UMA
ARQUITETURA PERSONALIZADA AO
DESENVOLVER UMA APLICAÇÃO ANDROID
“UMA BOA ARQUITETURA ISOLA A VIEW DE TODO
O RESTANTE DA APLICAÇÃO. ASSIM,
PODEREMOS EXTRAI-LÁ SEMPRE QUE
NECESSÁRIO.”
MVC MVP VIPER
CLEAN MVVM
MVP
MVP É UMA DERIVAÇÃO DO MVC,
FOCADO O ISOLAMENTO DA VIEW
FOI CRIADO EM 1990 POR UMA EMPRESA
CHAMADA TALIGENT, PARA SER USADO
EM SUAS APLICAÇÕES EM C++
SIM, O MVP É UMA PADRÃO COM
MAIS DE 25 ANOS DE IDADE!!!
VIEW PRESENTER MODEL
requestUser(userId)
showUser(user)
requestUser(userId)
showUser(user)
Android Java Puro
XML + Activity/Fragment Logica de Apresentação Regras de negócio
File System
Banco de dados
Sensores
Dependências Android injetadas
Regras de negócios
+
PONTOS POSITIVOS
▸ Camadas de Presenter e Model são testáveis
▸ Muita lógica removida de dentro das Views
▸ Camadas bem definidas facilitam o intendimento do código
▸ Entendimento muito simples de sua implementação
MUITO CÓDIGO ADICIONAL PARA
CRIAR OS PRESENTERS E
INTERFACES DE COMUNICAÇÃO
INTERFACES DE COMUNICAÇÃO
public interface CreateUserView {



void userCreated(User user);



String getEmail();

String getCpf();

String getRg();

String getLastName();

String getFirstName();



void setEmailError();

void setCpfError();

void setRgError();

void setLastNameError();

void setFirstNameError();



}
AS INTERFACES DE COMUNICAÇÃO
DO MVP SÃO UM PROBLEMA. =/
MVVM
O MVVM FOI DESENVOLVIDO
PELA MICROSOFT EM 2005.
COM O INTUITO DE FACILITAR A
IMPLEMENTAÇÃO DE PROGRAMAÇÃO
ORIENTADA A EVENTOS PARA UI
Arquitetura para aplicações Android. Do MVP ao MVVM.
MVVM IMPLICA NO USO DE
UMA API DE DATABINDING
Arquitetura para aplicações Android. Do MVP ao MVVM.
DATABINDING MUDA
COMPLETAMENTE O MODO DE
DESENVOLVER APPS ANDROID
VIEW View-Model MODEL
Android Java Puro
XML + Activity/Fragment
DataBinding
Dependências Android injetadas+
File System
Banco de dados
Sensores
Regras de negócios
Arquitetura para aplicações Android. Do MVP ao MVVM.
public class User {



private String firstName;

private String lastName;

private String rg;

private String cpf;

private String email;



public User() {}



public String getFirstName() {

return firstName;

}



public void setFirstName(String firstName) {

this.firstName = firstName;

}



public String getLastName() {

return lastName;

}



public void setLastName(String lastName) {

this.lastName = lastName;

}

public class User {



private String firstName;

private String lastName;

private String rg;

private String cpf;

private String email;



public User() {}



public String getFirstName() {

return firstName;

}



public void setFirstName(String firstName) {

this.firstName = firstName;

}



public String getLastName() {

return lastName;

}



public void setLastName(String lastName) {

this.lastName = lastName;

}



public String getRg() {

return rg;

TEXTO
<EditText

android:id="@+id/first_name"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:hint="@string/first_name"

app:fillError="@{viewModel.firstNameError}"

android:text="@={viewModel.user.firstName}"

android:layout_marginBottom="10dp"/>



<EditText

android:id="@+id/last_name"

android:layout_width="match_parent"

android:layout_height="wrap_content"

app:fillError="@{viewModel.lastNameError}"

android:text="@={viewModel.user.lastName}"

android:layout_marginBottom="10dp"/>



<EditText

android:id="@+id/rg"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_marginBottom="10dp"

app:fillError="@{viewModel.rgError}"

android:text="@={viewModel.user.rg}"/>
VIEW View-Model MODEL
Android Java Puro
XML + Activity/Fragment
DataBinding
firstName firstName
lastName lastName
email email
RG RG
CPF CPF
public class UserCreateViewModel {

private User user = new User();



public ObservableField<String> firstNameError = new ObservableField<>();

public ObservableField<String> lastNameError = new ObservableField<>();

public ObservableField<String> rgError = new ObservableField<>();

public ObservableField<String> cpfError = new ObservableField<>();

public ObservableField<String> emailError = new ObservableField<>();



public void userCreated(User user) {

if (isFormFilled(user)) {

createUserView.onUserCreated(user);

}

}



private boolean isFormFilled(User user) {

if (TextUtils.isEmpty(user.getFirstName())) {

firstNameError.set(createUserView.getString(R.string.mandatory_field));

return false;

} else if (TextUtils.isEmpty(user.getLastName())) {

lastNameError.set(createUserView.getString(R.string.mandatory_field));

return false;

} else if (TextUtils.isEmpty(user.getRg())) {

rgError.set(createUserView.getString(R.string.mandatory_field));

return false;

} else if (TextUtils.isEmpty(user.getCpf())) {

cpfError.set(createUserView.getString(R.string.mandatory_field));

return false;

} else if (TextUtils.isEmpty(user.getEmail())) {

emailError.set(createUserView.getString(R.string.mandatory_field));

return false;

}



return true;

}

VAMOS VER UNS
CÓDIGOS. =D
HTTPS://GITHUB.COM/CLERTONLEAL/
ANDROID-ARCHITECTURE
CÓDIGO DE EXEMPLO
OBRIGADO
‣ CLERTONLEAL@GMAIL.COM
‣ @CLERTONLEAL

Mais conteúdo relacionado

PPTX
Integração contínua - Rumo à automação e ao DEVOPS
PPT
Mobile Ria Para Aplicacoes Para Negocios
PDF
Code for Japan Summit2015 Day2 5374Party - Let's build 5374 for your town
PDF
Palestra MVP - Estudo de Casos
PDF
Scrum Day Portugal 2017 MVP Presentation
PDF
Prototipagem e MVP para startups
PPT
Validação de modelo de negócios, utilizando o Business Model Canvas.
PPTX
Innovation at 50x 031616
Integração contínua - Rumo à automação e ao DEVOPS
Mobile Ria Para Aplicacoes Para Negocios
Code for Japan Summit2015 Day2 5374Party - Let's build 5374 for your town
Palestra MVP - Estudo de Casos
Scrum Day Portugal 2017 MVP Presentation
Prototipagem e MVP para startups
Validação de modelo de negócios, utilizando o Business Model Canvas.
Innovation at 50x 031616

Semelhante a Arquitetura para aplicações Android. Do MVP ao MVVM. (20)

PPTX
Historia do mvc, mvp e mvvm no android
PDF
Android Dev Conference 2017 - Arquitetura para projetos Android
PDF
Desenvolvimento Moderno de aplicativos Android
PDF
Pilares do desenvolvimento Mobile no Nubank
PDF
Padrões Arquiteturais - MVC, MVP e MVVM
PDF
Desenvolvimento de aplicativos móveis para Android utilizando Java - 1/3
ODP
Android User Interface
PDF
Desenvolvimento Moderno de Aplicativos Android
PDF
Aula 1 view model livedata e databinding.pptx
PDF
Arquitetura no Android, realmente importa? - TDC 2011
PPTX
Utilizando o Padrão Presentation Model em Aplicações Flex
PDF
Plataforma Android: Produtividade Além do SDK
PPT
Entendendo a Tríade Model-View-Controller (MVC) utilizando padrões de projeto...
PPTX
MVVM – Hello World
PPTX
Desenvolvimento multiplataforma com Xamarin e MVVM: da arquitetura a UIs espe...
PPTX
Fabulous - Xamarin.Forms com Elmish
PDF
Script c
PPTX
4º FastShow - WPF Windows Presentation Foundation Overview
PPTX
Android - Activities and services
DOC
Como criar interfaces gráficas com android
Historia do mvc, mvp e mvvm no android
Android Dev Conference 2017 - Arquitetura para projetos Android
Desenvolvimento Moderno de aplicativos Android
Pilares do desenvolvimento Mobile no Nubank
Padrões Arquiteturais - MVC, MVP e MVVM
Desenvolvimento de aplicativos móveis para Android utilizando Java - 1/3
Android User Interface
Desenvolvimento Moderno de Aplicativos Android
Aula 1 view model livedata e databinding.pptx
Arquitetura no Android, realmente importa? - TDC 2011
Utilizando o Padrão Presentation Model em Aplicações Flex
Plataforma Android: Produtividade Além do SDK
Entendendo a Tríade Model-View-Controller (MVC) utilizando padrões de projeto...
MVVM – Hello World
Desenvolvimento multiplataforma com Xamarin e MVVM: da arquitetura a UIs espe...
Fabulous - Xamarin.Forms com Elmish
Script c
4º FastShow - WPF Windows Presentation Foundation Overview
Android - Activities and services
Como criar interfaces gráficas com android
Anúncio

Último (12)

PPT
06_slide de Arquitetura_de_Software .ppt
PDF
SLIDES - AULA 1 - APRESENTAÇÃO - Material de Cleyton Souza - IFPB
PPT
07_slides de Estilos_Arquiteturais sommerville.ppt
PPT
10_ slides de Reuso sommerville cap 10.ppt
PPT
03_slide de Gerenciamento de Projetos .ppt
PPT
05_slide especificacao de sistemas de software e a uml UML.ppt
PDF
SLIDES - AULA 3 - CLASSES E OBJETOS EM JAVA - Material de Cleyton Souza - IFPB
PPT
00_Apresentacao sobre o livro do sommerville_ES.ppt
PDF
SLIDES - AULA 7 - SWING - Cleyton Souza - IFPB
PDF
SLIDES - AULA 2 - INTRODUÇÃO - Material de Cleyton Souza - IFPB
PPT
09_Evolucao de software e_Refatoracao.ppt
PDF
SLIDES - AULA 5 - HERANÇA - Material de Cleyton Souza - IFPB
06_slide de Arquitetura_de_Software .ppt
SLIDES - AULA 1 - APRESENTAÇÃO - Material de Cleyton Souza - IFPB
07_slides de Estilos_Arquiteturais sommerville.ppt
10_ slides de Reuso sommerville cap 10.ppt
03_slide de Gerenciamento de Projetos .ppt
05_slide especificacao de sistemas de software e a uml UML.ppt
SLIDES - AULA 3 - CLASSES E OBJETOS EM JAVA - Material de Cleyton Souza - IFPB
00_Apresentacao sobre o livro do sommerville_ES.ppt
SLIDES - AULA 7 - SWING - Cleyton Souza - IFPB
SLIDES - AULA 2 - INTRODUÇÃO - Material de Cleyton Souza - IFPB
09_Evolucao de software e_Refatoracao.ppt
SLIDES - AULA 5 - HERANÇA - Material de Cleyton Souza - IFPB
Anúncio

Arquitetura para aplicações Android. Do MVP ao MVVM.