Slide 1

Slide 1 text

Refactoring to Kotlin Wajahat Karim Moving Big Old Java Codebase to New Awesome Kotlin WajahatKarim

Slide 2

Slide 2 text

I am Wajahat Karim And I work at Contour Software. Hey There! Coding 8+ Years Experienced Android Developer Writing Authored 2 Worldwide Published Books Passion Open Source Contributor (many Android libraries) Community AndroidPub, FlutterPub, Articles, and Talks

Slide 3

Slide 3 text

This is a story of...

Slide 4

Slide 4 text

Messy Code Deprecated Libraries Frustrated Developers Not-so-happy Clients And Project X

Slide 5

Slide 5 text

An Uber-like app for businesses (B2B) 73+ screens and counting 6+ different apps for each customer with own colors, server, features 400+ classes (including Activity, Views, Models, POJOs) Existing codebase to work upon - Code modification takes double time. Project X

Slide 6

Slide 6 text

What We Expected Modern APIs & Frameworks Some good architecture like MVP, MVVM etc. Well organized & commented code Unit & Instrumentation Tests

Slide 7

Slide 7 text

What We Got Modern APIs & Frameworks - 2010 codebase never upgraded in years Some good architecture like MVP, MVVM etc. - Everything is in one BIG class. Well organized & commented code - Who has time for it? Unit & Instrumentation Tests - Sorry? What’s that? Never heard of it before.

Slide 8

Slide 8 text

Old Code Architecture

Slide 9

Slide 9 text

Let’s convert it Kotlin... CTRL + SHIFT + K

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

New Code Architecture

Slide 12

Slide 12 text

Refactor vs Rewrite No disturbance in existing features New features & bug fixes Tight deadlines & less time Too big risk to handle Refactoring

Slide 13

Slide 13 text

What We Did 1. Move all network code to Network Repository 2. Move all local persistence code to Local Repository 3. Move everything except UI, Navigation, & Business Logic to Common / Utils 4. Create separate Activity/Fragment from big multiple-screen classes 5. Integrate Kotlin & MVVM Core classes 6. Move Business Logic to ViewModel

Slide 14

Slide 14 text

1. Unit & Instrumentation Testing 2. CI/CD Automation 3. Integrate Room database 4. Integrate Retrofit + Coroutines What’s Next

Slide 15

Slide 15 text

Show’em the code!

Slide 16

Slide 16 text

Kotlin Extensions = ❤ https://wajahatkarim.com/2019/03/-launching-activities-in-easier-way-using-kotlin-extensions-

Slide 17

Slide 17 text

Domain Specific Language (DSL) Java Kotlin with DSL Builder https://android.jlelse.eu/domain-specific-language-dsl-using-kotlin-with-retrofit-example-9be5ef65a4fb

Slide 18

Slide 18 text

@JVMStatic Kotlin Without @JVMStatic in Java With @JVMStatic in Java

Slide 19

Slide 19 text

https://wajahatkarim.com [email protected] github.com/wajahatkarim3 @WajahatKarim Any Questions? medium.com/@wajahatkarim3