Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Design & be reactive on Android with Iron Man in a clean way

Design & be reactive on Android with Iron Man in a clean way

Saul Molinero

November 27, 2015
Tweet

More Decks by Saul Molinero

Other Decks in Programming

Transcript

  1. Design & be reactive on
    Android with Iron Man in a
    clean way

    Saúl Molinero
    MADRID · NOV 27-28 · 2015 @_saulmm

    View Slide

  2. MADRID · NOV 27-28 · 2015
    @_saulmm
    Popsy

    View Slide

  3. MADRID · NOV 27-28 · 2015
    @_saulmm
    DEPENDENCY INjECTION
    Coordinator Layout
    RXJAVA
    RETROFIT 2
    CLEAN ARCHITECTURE
    DATA BINDING
    OKhttp

    View Slide

  4. MADRID · NOV 27-28 · 2015
    @_saulmm
    CLEAN ARCHITECTURE

    View Slide

  5. MADRID · NOV 27-28 · 2015
    @_saulmm
    SOLID

    View Slide

  6. MADRID · NOV 27-28 · 2015
    @_saulmm
    SOLID
    SINGLE responsibility
    OPEN-CLOSED
    LISKOV SUBSTITUTION
    INTERFACE SEGREGATION
    DEPENDENCY INVERSION

    View Slide

  7. MADRID · NOV 27-28 · 2015
    @_saulmm
    - Easy to test
    - Easy to add
    - Easy to hide implementations
    Featuring:

    View Slide

  8. MADRID · NOV 27-28 · 2015
    @_saulmm
    Views PRESENTER
    INTERACTOR

    / USECASE
    INTERACTOR

    / USECASE
    INTERACTOR

    / USECASE
    REPOSITORY DATASOURCE
    DATASOURCE
    DATASOURCE
    View Interface INTERACTOR INTERFACE REPO INTERFACE DATA SOURCE INTERFACE

    View Slide

  9. MADRID · NOV 27-28 · 2015
    @_saulmm
    Activity / Fragment / Dialog / Whatever CLEAN

    View Slide

  10. MADRID · NOV 27-28 · 2015
    @_saulmm
    Activity / Fragment / Dialog / Whatever CLEAN

    View Slide

  11. MADRID · NOV 27-28 · 2015
    @_saulmm
    Activity / Fragment / Dialog / Whatever CLEAN

    View Slide

  12. MADRID · NOV 27-28 · 2015
    @_saulmm
    Activity / Fragment / Dialog / Whatever CLEAN

    View Slide

  13. MADRID · NOV 27-28 · 2015
    @_saulmm
    Presenter
    CLEAN

    View Slide

  14. MADRID · NOV 27-28 · 2015
    @_saulmm
    RETROFIT

    View Slide

  15. MADRID · NOV 27-28 · 2015
    @_saulmm
    RETROFIT 2

    View Slide

  16. MADRID · NOV 27-28 · 2015
    @_saulmm
    RETROFIT 2

    View Slide

  17. MADRID · NOV 27-28 · 2015
    @_saulmm
    RETROFIT 2

    View Slide

  18. MADRID · NOV 27-28 · 2015
    @_saulmm
    Asynchronous
    Synchronous
    RETROFIT 2

    View Slide

  19. MADRID · NOV 27-28 · 2015
    @_saulmm
    Asynchronous
    Synchronous
    RETROFIT 2

    View Slide

  20. MADRID · NOV 27-28 · 2015
    @_saulmm
    Call pattern RETROFIT 2

    View Slide

  21. MADRID · NOV 27-28 · 2015
    @_saulmm
    RETROFIT 2

    View Slide

  22. MADRID · NOV 27-28 · 2015
    @_saulmm
    RETROFIT 2

    View Slide

  23. MADRID · NOV 27-28 · 2015
    @_saulmm
    OKHTTP
    OkHttp

    View Slide

  24. MADRID · NOV 27-28 · 2015
    @_saulmm
    OKHTTP

    View Slide

  25. MADRID · NOV 27-28 · 2015
    @_saulmm
    Support design library

    View Slide

  26. MADRID · NOV 27-28 · 2015
    @_saulmm
    DESIGN

    View Slide

  27. MADRID · NOV 27-28 · 2015
    @_saulmm
    DESIGN

    View Slide

  28. MADRID · NOV 27-28 · 2015
    @_saulmm
    DESIGN

    View Slide

  29. MADRID · NOV 27-28 · 2015
    @_saulmm
    DESIGN

    View Slide

  30. MADRID · NOV 27-28 · 2015
    @_saulmm
    DESIGN

    View Slide

  31. MADRID · NOV 27-28 · 2015
    @_saulmm
    DESIGN

    View Slide

  32. MADRID · NOV 27-28 · 2015
    @_saulmm
    Support design library

    Coordinator layout

    View Slide

  33. MADRID · NOV 27-28 · 2015
    @_saulmm

    View Slide

  34. MADRID · NOV 27-28 · 2015
    @_saulmm

    View Slide

  35. MADRID · NOV 27-28 · 2015
    @_saulmm

    View Slide

  36. MADRID · NOV 27-28 · 2015
    @_saulmm

    View Slide

  37. MADRID · NOV 27-28 · 2015
    @_saulmm

    View Slide

  38. MADRID · NOV 27-28 · 2015
    @_saulmm
    BEHAVIORS

    View Slide

  39. MADRID · NOV 27-28 · 2015
    @_saulmm
    BEHAVIORS

    View Slide

  40. MADRID · NOV 27-28 · 2015
    @_saulmm
    BEHAVIORS

    View Slide

  41. MADRID · NOV 27-28 · 2015
    @_saulmm
    BEHAVIORS

    View Slide

  42. MADRID · NOV 27-28 · 2015
    @_saulmm
    BEHAVIORS

    View Slide

  43. MADRID · NOV 27-28 · 2015
    @_saulmm
    BEHAVIORS

    View Slide

  44. MADRID · NOV 27-28 · 2015
    @_saulmm
    DATA BINDING

    View Slide

  45. MADRID · NOV 27-28 · 2015
    @_saulmm

    View Slide

  46. MADRID · NOV 27-28 · 2015
    @_saulmm

    View Slide

  47. MADRID · NOV 27-28 · 2015
    @_saulmm

    View Slide

  48. MADRID · NOV 27-28 · 2015
    @_saulmm
    DATA BINDING

    View Slide

  49. MADRID · NOV 27-28 · 2015
    @_saulmm
    DATA BINDING

    View Slide

  50. MADRID · NOV 27-28 · 2015
    @_saulmm
    DATA BINDING

    View Slide

  51. MADRID · NOV 27-28 · 2015
    @_saulmm
    DATA BINDING

    View Slide

  52. MADRID · NOV 27-28 · 2015
    @_saulmm
    DATA BINDING

    View Slide

  53. MADRID · NOV 27-28 · 2015
    @_saulmm
    DATA BINDING

    View Slide

  54. MADRID · NOV 27-28 · 2015
    @_saulmm
    DATA BINDING

    View Slide

  55. MADRID · NOV 27-28 · 2015
    @_saulmm
    DATA BINDING

    View Slide

  56. MADRID · NOV 27-28 · 2015
    @_saulmm
    DATA BINDING

    View Slide

  57. MADRID · NOV 27-28 · 2015
    @_saulmm
    DATA BINDING

    View Slide

  58. MADRID · NOV 27-28 · 2015
    @_saulmm
    DATA BINDING

    View Slide

  59. MADRID · NOV 27-28 · 2015
    @_saulmm
    ==
    DATA BINDING

    View Slide

  60. MADRID · NOV 27-28 · 2015
    @_saulmm
    DATA BINDING

    View Slide

  61. MADRID · NOV 27-28 · 2015
    @_saulmm
    DATA BINDING

    View Slide

  62. MADRID · NOV 27-28 · 2015
    @_saulmm
    DEPENDENCY INJECTION

    View Slide

  63. MADRID · NOV 27-28 · 2015
    @_saulmm
    Testing
    DEPENDENCY INJECTION
    Low coupling MODULARITY

    View Slide

  64. MADRID · NOV 27-28 · 2015
    @_saulmm
    DEPENDENCY INJECTION

    View Slide

  65. MADRID · NOV 27-28 · 2015
    @_saulmm
    DEPENDENCY INJECTION

    View Slide

  66. MADRID · NOV 27-28 · 2015
    @_saulmm
    DEPENDENCY INJECTORS

    View Slide

  67. MADRID · NOV 27-28 · 2015
    @_saulmm
    DEPENDENCY INJECTION

    View Slide

  68. MADRID · NOV 27-28 · 2015
    @_saulmm
    : )
    DEPENDENCY INJECTION

    View Slide

  69. MADRID · NOV 27-28 · 2015
    @_saulmm
    : )
    DEPENDENCY INJECTION

    View Slide

  70. MADRID · NOV 27-28 · 2015
    @_saulmm
    ¿?
    DEPENDENCY INJECTION

    View Slide

  71. MADRID · NOV 27-28 · 2015
    @_saulmm
    DEPENDENCY INJECTION

    View Slide

  72. MADRID · NOV 27-28 · 2015
    @_saulmm
    ¿?
    DEPENDENCY INJECTION

    View Slide

  73. MADRID · NOV 27-28 · 2015
    @_saulmm
    ¿?
    DEPENDENCY INJECTION

    View Slide

  74. MADRID · NOV 27-28 · 2015
    @_saulmm
    ¿?
    DEPENDENCY INJECTION

    View Slide

  75. MADRID · NOV 27-28 · 2015
    @_saulmm

    DEPENDENCY INJECTION

    View Slide

  76. MADRID · NOV 27-28 · 2015
    @_saulmm
    DEPENDENCY INJECTION - Dagger 2 modules

    View Slide

  77. MADRID · NOV 27-28 · 2015
    @_saulmm
    DEPENDENCY INJECTION - Dagger 2 modules

    View Slide

  78. MADRID · NOV 27-28 · 2015
    @_saulmm
    DEPENDENCY INJECTION - Dagger 2 modules

    View Slide

  79. MADRID · NOV 27-28 · 2015
    @_saulmm
    RX Java

    View Slide

  80. MADRID · NOV 27-28 · 2015
    @_saulmm

    View Slide

  81. MADRID · NOV 27-28 · 2015
    @_saulmm
    Characters stream
    RESULTS stream

    View Slide

  82. MADRID · NOV 27-28 · 2015
    @_saulmm
    (observable)
    (subscriber)

    View Slide

  83. MADRID · NOV 27-28 · 2015
    @_saulmm
    Observable
    SubscribeR
    RX JAVA

    View Slide

  84. MADRID · NOV 27-28 · 2015
    @_saulmm
    Observable
    onNext(T t) -> emits items
    onCompleted() -> no errors and no more emissions
    onError(Throwable t) -> an error has happened
    RX JAVA

    View Slide

  85. MADRID · NOV 27-28 · 2015
    @_saulmm
    Observable
    RX JAVA
    fetchCharacters();

    View Slide

  86. MADRID · NOV 27-28 · 2015
    @_saulmm
    Observable
    Subscriber
    RX JAVA
    onNext

    View Slide

  87. MADRID · NOV 27-28 · 2015
    @_saulmm
    Observable
    Subscriber
    RX JAVA
    onError

    View Slide

  88. MADRID · NOV 27-28 · 2015
    @_saulmm
    Observable
    Subscriber
    RX JAVA
    onCompleted

    View Slide

  89. MADRID · NOV 27-28 · 2015
    @_saulmm
    Observable
    Subscriber
    Scheduler
    RX JAVA

    View Slide

  90. MADRID · NOV 27-28 · 2015
    @_saulmm
    RX JAVA

    View Slide

  91. MADRID · NOV 27-28 · 2015
    @_saulmm
    Observable
    Subscriber
    Scheduler
    RX JAVA

    View Slide

  92. MADRID · NOV 27-28 · 2015
    @_saulmm
    Observable
    Subscriber
    Scheduler
    RX JAVA

    View Slide

  93. MADRID · NOV 27-28 · 2015
    @_saulmm
    RX JAVA

    View Slide

  94. MADRID · NOV 27-28 · 2015
    @_saulmm
    RX JAVA
    OPERATORS !!!

    View Slide

  95. MADRID · NOV 27-28 · 2015
    @_saulmm
    RX JAVA
    OPERATORS !!!

    View Slide

  96. MADRID · NOV 27-28 · 2015
    @_saulmm
    RX JAVA
    OPERATORS !!!

    View Slide

  97. MADRID · NOV 27-28 · 2015
    @_saulmm
    RX JAVA
    OPERATORS !!!

    View Slide

  98. MADRID · NOV 27-28 · 2015
    @_saulmm
    REFERENCES

    View Slide

  99. MADRID · NOV 27-28 · 2015
    @_saulmm
    https:/
    /github.com/saulmm/Avengers

    View Slide

  100. MADRID · NOV 27-28 · 2015
    @_saulmm
    References
    http:/
    /www.slideshare.net/flipper83/forgetting-android
    http:/
    /pguardiola.com/blog/clean-architecture-part-1/
    http:/
    /fernandocejas.com/2014/09/03/architecting-android-the-clean-way/
    http:/
    /www.materialup.com/posts/marvel-avengers-app-animation-concept
    https:/
    /speakerdeck.com/realm/functional-reactive-programming-in-java-by-juan-gomez-droidcon-nyc-2015
    https:/
    /speakerdeck.com/realm/bay-area-android-yigit-boyar-and-george-mount-data-binding-in-android-6-dot-0
    http:/
    /es.slideshare.net/PedroVicenteGmezSnch/dependency-injection-on-android-spanish
    https:/
    /github.com/PaNaVTEC/Clean-Contacts

    View Slide

  101. MADRID · NOV 27-28 · 2015
    @_saulmm
    References
    http:/
    /www.slideshare.net/jmpereirag/limpiando-espero-la-arquitectura-que-yo-quiero

    View Slide

  102. MADRID · NOV 27-28 · 2015
    @_saulmm
    THANKS !!

    View Slide