arquitetura no android, realmente importa? - tdc 2011
DESCRIPTION
Presentation made in 2011 about Development Patterns in Android at The Developer's Conference 2011.TRANSCRIPT
![Page 1: Arquitetura no Android, realmente importa? - TDC 2011](https://reader035.vdocuments.mx/reader035/viewer/2022081801/55906c831a28ab4e488b4719/html5/thumbnails/1.jpg)
Desenvolvendo para Android
Dividindo responsabilidades da melhor forma
![Page 2: Arquitetura no Android, realmente importa? - TDC 2011](https://reader035.vdocuments.mx/reader035/viewer/2022081801/55906c831a28ab4e488b4719/html5/thumbnails/2.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022081801/55906c831a28ab4e488b4719/html5/thumbnails/3.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022081801/55906c831a28ab4e488b4719/html5/thumbnails/4.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022081801/55906c831a28ab4e488b4719/html5/thumbnails/5.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022081801/55906c831a28ab4e488b4719/html5/thumbnails/6.jpg)
MVCOnde está o Controller?
![Page 7: Arquitetura no Android, realmente importa? - TDC 2011](https://reader035.vdocuments.mx/reader035/viewer/2022081801/55906c831a28ab4e488b4719/html5/thumbnails/7.jpg)
É óbvio meu caro
Activities são os controllers
![Page 8: Arquitetura no Android, realmente importa? - TDC 2011](https://reader035.vdocuments.mx/reader035/viewer/2022081801/55906c831a28ab4e488b4719/html5/thumbnails/8.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022081801/55906c831a28ab4e488b4719/html5/thumbnails/9.jpg)
Mas, será que realmente devemos considerar activities controllers?
![Page 10: Arquitetura no Android, realmente importa? - TDC 2011](https://reader035.vdocuments.mx/reader035/viewer/2022081801/55906c831a28ab4e488b4719/html5/thumbnails/10.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022081801/55906c831a28ab4e488b4719/html5/thumbnails/11.jpg)
....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](https://reader035.vdocuments.mx/reader035/viewer/2022081801/55906c831a28ab4e488b4719/html5/thumbnails/12.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022081801/55906c831a28ab4e488b4719/html5/thumbnails/13.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022081801/55906c831a28ab4e488b4719/html5/thumbnails/14.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022081801/55906c831a28ab4e488b4719/html5/thumbnails/15.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022081801/55906c831a28ab4e488b4719/html5/thumbnails/16.jpg)
View Objects??? WTF O.o
![Page 17: Arquitetura no Android, realmente importa? - TDC 2011](https://reader035.vdocuments.mx/reader035/viewer/2022081801/55906c831a28ab4e488b4719/html5/thumbnails/17.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022081801/55906c831a28ab4e488b4719/html5/thumbnails/18.jpg)
O que fariamos normalmente?
Show me the code
![Page 19: Arquitetura no Android, realmente importa? - TDC 2011](https://reader035.vdocuments.mx/reader035/viewer/2022081801/55906c831a28ab4e488b4719/html5/thumbnails/19.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022081801/55906c831a28ab4e488b4719/html5/thumbnails/20.jpg)
Usando View Objects
Show me the code
![Page 21: Arquitetura no Android, realmente importa? - TDC 2011](https://reader035.vdocuments.mx/reader035/viewer/2022081801/55906c831a28ab4e488b4719/html5/thumbnails/21.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022081801/55906c831a28ab4e488b4719/html5/thumbnails/22.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022081801/55906c831a28ab4e488b4719/html5/thumbnails/23.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022081801/55906c831a28ab4e488b4719/html5/thumbnails/24.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022081801/55906c831a28ab4e488b4719/html5/thumbnails/25.jpg)
Let’s Talk NowQuestions?
Doubts?
Opnions?
Do you disagree with me? It’s ur turn. Talk!!