- Arquitetura MVP utilizando dagger 2 com teste unitário e teste funcional, o objetivo principal não é ensinar as tecnologias, mais sim como funciona a arquitetura e seus testes.Mais abaixo estão umas pequenas descrições e seus link para aprendizado. Essas tecnologias são um pre-requisito para entender a nossa arquitetura com Dagger2 e MVP.
- O Dagger 2 é um framework mantido pela google que tem por objetivo realizar a injeção de dependência em projetos Android e Java. Ele foi criado a partir do Dagger 1 que foi desenvolvido pela Square. Mais informações obter nesses links abaixo:
https://google.github.io/dagger/
https://blog.mindorks.com/a-complete-guide-to-learn-dagger-2-b4c7a570d99c
https://code.tutsplus.com/tutorials/dependency-injection-with-dagger-2-on-android--cms-23345
- Um Fragment representa o comportamento ou uma parte da interface do usuário em um Activity. É possível combinar vários fragmentos em uma única atividade para compilar uma IU de vários painéis e reutilizar um fragmento em diversas atividades, nessa arquitetura eu utilizei fragmentos, e criei uma classe chamada "ManagerFragment" para gerenciar a parte de adicionar, remover e substituir fragmento. Mais informações nesses links abaixo:
https://developer.android.com/training/basics/fragments/creating.html
http://www.vogella.com/tutorials/AndroidFragments/article.html
- Os padrões de arquitetura são fundamentais para mantermos um código limpo, expansível e testável. Estas soluções reconhecidas vem sendo desenvolvidas há anos e oferecem referências indispensáveis para a implementação de projetos robustos, com confiabilidade e dentro dos standards que a indústria espera. Nesse projeto eu utilizei o MVP, por que se adequa bem para filosofia de TDD, onde eu utilizei nesse projeto o (JUnit, Roboletric e Espresso). Mais informações obter nesses links abaixo:
http://www.thiengo.com.br/mvp-android
https://android.jlelse.eu/android-mvp-for-beginners-25889c500443
https://www.codeproject.com/Articles/288928/Differences-between-MVC-and-MVP-for-Beginners
- Desenvolvimento dirigido por testes é uma técnica de desenvolvimento de software que baseia em um ciclo curto de repetições: primeiramente o desenvolvedor escreve um caso de teste automatizado que define uma melhoria desejada ou uma nova funcionalidade.Mais informações no link abaixo:
https://medium.com/mobility/how-to-do-tdd-in-android-90f013d91d7f
http://bytes.babbel.com/en/articles/2016-05-20-tdd-in-android.html
http://rafael-miceli.com.br/tdd/2015/03/28/TDD-Com-Android-RED.html
https://www.toptal.com/android/testing-like-a-true-green-droid
- Junit
http://www.vogella.com/tutorials/JUnit/article.html
http://www.mkyong.com/tutorials/junit-tutorials/
http://alexzh.com/tutorials/android-testing-unit-testing/
- Roboletric
https://github.com/codepath/android_guides/wiki/Unit-Testing-with-Robolectric
http://alexzh.com/tutorials/android-testing-mockito-robolectric/
- espresso
http://alexzh.com/tutorials/android-testing-espresso-part-3/
http://alexzh.com/tutorials/android-testing-espresso-uiautomator-together/
- tudo começa com uma MainActivity normal, mais no pacote main eu crio 4 classes:
- MainActivity - classe principal que vai instanciar um fragmento via dagger2, a MainActivity tem uma Interface chamada OnMainActivity, e nesse pacote tem mais duas classes, "MainModule" e "OnMainModule" que são classes do dagger2.
- Classe MainActivity eu instancio meu Fragmento que é o SplashFragment e o meu gerenciador de Fragmento que é o "ManagerFragment" via dagger 2
- ManagerFragment gerencia esses métodos de adicionar, remover e substituir os fragment conforme a figura abaixo:
-
No momento que o fragmento "SplashView" é instaciada começamos trabalhar o MVP, conforme mostrado no pacote "splash", nesse pacote eu crio 6 classes
-
2 classes são do dagger2 que éo OnSplashComponente e o SplashModule o resto é do MVP que é gerenciado por Interface
-
no OnCreateView da minha view SplashView eu inicio o meu componente do dagger para instanciar meu Presenter onde ele tem uma instancia do SplashView e que irá se comuniar com interactor.
- Dentro do SplashPresenter eu inicio meu componenter do dagger2 para instanciar meu interactor
- e depois que eu chamo meu interactor que é um padrão de projeto que usa o Padrão de projeto "Comand", o interactor se comunica ou com a camada de Dados ou pode se comunicar com um Servidor web, via retrofit.
mais na arquitetura eu só estou fazendo uma chamada para o meu presenter e faço o replace no fragmento chamando o meu ContentFragment.
- Por fim eu crie teste de unidade e funcionais, conforme mostrado a figura abaixo, nesses teste eu usei os frameworks JUnit, Roboletric e Espresso com o Padrão TDD.
- Essa arquitetura MVP é para ajudar desenvolvedores ou equipe de desenvolvimento trabalhararem com mais segurança nos seus códigos e com mais qualidades e visando também a manutenalibilidade de seus códigos, qualquer dúvida ou sugestão meu email: enzo.carvalho.teles@gmail.com