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

Android code scalability

Android code scalability

Avatar for Dionysis Lorentzos

Dionysis Lorentzos

March 29, 2018

More Decks by Dionysis Lorentzos

Other Decks in Technology

Transcript

  1. TEAM SIZE Android devs 0 3 6 9 Q1 2015

    Q1 2016 Q1 2017 Q1 2018
  2. Build new features, fast & with quality Iterate existing features,

    fast & with quality Build new features, fast & with quality Iterate existing features, fast & with quality
  3. HOW TO REDUCE LINTS? Build Passed Build Failed Build Skipped

    d Passed Build Failed Build Skipped Build Passed Build Failed Build Skipped Build Skipped Build Passed Strict CI Lint rules
  4. DATA LAYER Get or set data to the backend (e.g.

    Api clients) Get or set data to our local storage (e.g. Databases)
  5. UI DOMAIN DATA PRESENTERS VIEWS API CLIENTS REPOSITORIES INTERACTORS DATABASE

    Interface between layers: RxJava 1 RxJava 2 Callbacks Different language
  6. interface ! { fun onStart() fun onStop() } Hint: The

    compiler doesn’t like !. Will not compile.
  7. class MyActivity : Activity() { val !s = ArrayList<!>() override

    fun onStart() { !s.forEach { it.onStart() } } }
  8. class MyActivity : Activity() { val !s = ArrayList<!>() override

    fun onStart() { !s.forEach { it.onStart() } } override fun onStop() { !s.forEach { it.onStop() } } }
  9. class CustomView: FrameLayout( ), ! { override fun onStart() {

    "# call presenter start } override fun onStop() { "# call presenter stop } }
  10. class CustomView: FrameLayout( ), ! { init { (context as

    MyActivity). !s.add(this) } override fun onStart() { "# call presenter start } override fun onStop() { "# call presenter stop } }
  11. class CustomView: FrameLayout( ), ! { init { (context as

    MyActivity) . ! s.add(this) } override fun onStart() { "# call presenter start } override fun onStop() { "# call presenter stop } } class MyActivity : Activity() { val !s = ArrayList<!>() override fun onStart() { !s.forEach { it.onStart() } } override fun onStop() { !s.forEach { it.onStop() } } }
  12. Centralize dependencies /buildSrc/src/main/java object versions { val kotlin ="1.2.30" }

    object libraries { object kotlin { val reflect = "org.jetbrains.kotlin:kotlin-reflect:${versions.kotlin}" val stdlib = "org.jetbrains.kotlin:kotlin-stdlib:${versions.kotlin}" } }
  13. Reduce bugs 40+% tested code | 100% business logic 99,99%

    crash free rate Isolated code which reduces domino bugfixes REDUCE BUGS
  14. Low overlap between features Legacy code easier migrated If we

    had suddenly 20 devs, the code is completely isolated INCREASED SPEED