Arquitetura no Android, realmente importa? - TDC 2011

25
Desenvolvendo para Android Dividindo responsabilidades da melhor forma

description

Presentation made in 2011 about Development Patterns in Android at The Developer's Conference 2011.

Transcript of Arquitetura no Android, realmente importa? - TDC 2011

Page 1: Arquitetura no Android, realmente importa? - TDC 2011

Desenvolvendo para Android

Dividindo responsabilidades da melhor forma

Page 2: Arquitetura no Android, realmente importa? - TDC 2011

About Me

Marcos Paulo DamascenoSoftware Developer @NavitaTecnologia

Formado em Desenvolvimento de Software pelo IFCE

Cearense de língua presa, amante de música, do trabalho e das pessoas.

Page 3: Arquitetura no Android, realmente importa? - TDC 2011

Quero desenvolver para android o/

Java

ActivityContext

ListView Adapters

Intents

Ciclo de Vida

Geolocalização

Content Provider

Services

GPS

Network

Android Manifest

Page 4: Arquitetura no Android, realmente importa? - TDC 2011

MotivaçõesOi, como vai a sua arquitetura?

Problemas pra diminuir o acoplamento entre tela e regras de negócio.

Activities estavam ficando megazords.

Adapters estavam fazendo muitas formatações de valores pra exibir na tela, que não eram aproveitáveis.

Código difícil e chato de testar

Aplicação frágil

Falta de padrão bem definido na comunidade.

Page 5: Arquitetura no Android, realmente importa? - TDC 2011

Então o que devo utilizar?

Simples, vou usar o MVC, claro.

MVC é pros fracos, eu sou Hippie, vou usar MVP

Page 6: Arquitetura no Android, realmente importa? - TDC 2011

MVCOnde está o Controller?

Page 7: Arquitetura no Android, realmente importa? - TDC 2011

É óbvio meu caro

Activities são os controllers

Page 8: Arquitetura no Android, realmente importa? - TDC 2011

Controller

O controlador (controller) recebe a entrada de dados e inicia a resposta ao utilizador

ao invocar objetos do modelo, e por fim uma visão baseada na entrada. Ele também é responsável pela

validação e filtragem da entrada de dados.Wikipedia

Page 9: Arquitetura no Android, realmente importa? - TDC 2011

Mas, será que realmente devemos considerar activities controllers?

Page 10: Arquitetura no Android, realmente importa? - TDC 2011

Responsabilidades das Activities

Capturar os componentes do xml e colocar em objetos.

Certas responsabilidade de criação de tela, como por

exemplo criação OptionsMenu, ContextMenu e etc.

Responsabilidades de troca de tela e chamada de intents.

Page 11: Arquitetura no Android, realmente importa? - TDC 2011

....Sim, tudo bem se você trabalha com sua activity como

se ele fosse um controller único.

Mas sua activity pode acabar assim.

Page 12: Arquitetura no Android, realmente importa? - TDC 2011

Se você acha que ter mais de 300 linhas de código na sua activity é normal e aceitável.

Você tem probleminha....

Page 13: Arquitetura no Android, realmente importa? - TDC 2011

Brincadeira... não é regra.... Sabemos que quantidade não é qualidade...

Em nada desse mundo... seja pra mais ou seja pra menos....

Page 14: Arquitetura no Android, realmente importa? - TDC 2011

Mas se podemos dividir responsabilidades e melhorar o nosso código, devemos fazê-lo.

Pra isso, criamos mais uma camada, entre a nossa regra de negócio, e as activities.... camada que chamaremos

de.... Controllers.

Page 15: Arquitetura no Android, realmente importa? - TDC 2011

ActivitiesDevem acessar os objetos do xml. No onCreate instanciar o controller. E nos

listeners chamar métodos específicos do controller.

ControllerDeve chamar as regras de negócio, obter a resposta e transformar ela em ViewObjects

para retorná-los para as activities.

ViewObjects

Responsável por conter os dados como devem ser exibidos em tela, já tratados. Criado de acordo com componentes.

Page 16: Arquitetura no Android, realmente importa? - TDC 2011

View Objects??? WTF O.o

Page 17: Arquitetura no Android, realmente importa? - TDC 2011

Imagine a seguinte situação:

Aplicativo de monitoramento de ligações e planos de voz.

Com a seguinte tela.

Ao carregar o aplicativo, um ListView aparece e mostra minutos utilizados

e a porcentagem de utilização

Page 18: Arquitetura no Android, realmente importa? - TDC 2011

O que fariamos normalmente?

Show me the code

Page 19: Arquitetura no Android, realmente importa? - TDC 2011

O problema dessa abordagem é que:

Se por acaso um dia mudarmos a forma como os dados são enviados,

devemos modificar a lógica do Adapter.

Veja que o adapter ficou cheio de lógica desnecessária e ele está bem

acoplado.

Page 20: Arquitetura no Android, realmente importa? - TDC 2011

Usando View Objects

Show me the code

Page 21: Arquitetura no Android, realmente importa? - TDC 2011

Analisando

A ideia é que o VO tenha mais do que dados, mas também parâmetros como cores do progress bar

de acordo com a porcentagem utilizado.

Dessa forma nosso Adapter tem a única responsabilidade de setar os dados nos

componentes da row. A lógica de exibição fica toda centralizada. Se algo mudar no modelo que vem do

server, nosso adapter continua intacto.

Page 22: Arquitetura no Android, realmente importa? - TDC 2011

Veja que...

Claro que isso não é regra, se sua listview tem diferentes rows de acordo com dados a serem exibidos inevitavelmente ela terá alguma lógica.

Dependendo do projeto criar view objects pode ser trabalhoso e demorado, tem que analisar bem

tudo e trabalhar da melhor forma possível.

Também é válido criar uma Activity abstrata pra obrigar implementação de métodos para «atachar» os

componentes de xml com suas respectivas Actions e também para carregar os componentes do XML. Ou mesmo para manter códigos reaprovetáveis como

funcionamento da action bar.

Page 23: Arquitetura no Android, realmente importa? - TDC 2011

Arre Égua, qual o objetivo da palestra então?

É dizer sim, a arquitetura do projeto importa, não é porque é um projeto para um dispositivo móvel que

deve ser desenvolvido como vem na telha.

Estratégias devem ser analisadas, design patterns devem ser utilizados.

Com o sucesso dos tablets a qualquer momento você pode precisar pegar aquela sua aplicação pra

smartphone e ter que torná-la universal para tablets.E aí José? O que você vai fazer? Criar um novo projeto só pra tablets e copiar e colar códigos

reaprovetáveis? Refatorar o código que tá todo amarrado?

Page 24: Arquitetura no Android, realmente importa? - TDC 2011

Desenvolver Software Mobile é coisa séria!!!!

Vamos abrir nossa mentes e fazer apps pra android com qualidade ;)

Page 25: Arquitetura no Android, realmente importa? - TDC 2011

Let’s Talk NowQuestions?

Doubts?

Opnions?

Do you disagree with me? It’s ur turn. Talk!!