SlideShare a Scribd company logo
New AndroidProject:
TheMost ImportantDecisions
Vasiliy Zukanov
FreelanceAndroid developer & consultant
Twitter: VasiliyZukanov
Blog: TechYourChance.com
Whostarted a new professional Android project
in the past 3years?
…past2 years?
…pastyear?
@VasiliyZukanov 2
Which language, frameworks, libraries,practices,etc.
should Iuse in a new project?
@VasiliyZukanov 3
RxJava
Kotlin
Java
Coroutines
ViewModel
Koin
Dagger
Navigation
Conductor
MVI
MVVM
MVP
MVC
AutoValue
ConstraintLayout
Timber
ThreadPool
LiveData
Glide
Fragment
Single-activity
WorkManager EventBus
Gson
Picasso
Fresco
Coil
SqlDelight
Room Moshi
Firebase
Flow
Modularization
Architecture
@VasiliyZukanov 4
“Architecture represents the
significant design decisions that shape
asystem, where significantis
measured by cost of change.
@VasiliyZukanov 5
Architecture – GradyBooch
“Architecture is the set of decisions
that are hard to change.
@VasiliyZukanov 6
Architecture – Martin Fowler
Architecture
≈
Subset of design decisions that affect the cost ofchange the most
≈
Maintainability!
@VasiliyZukanov 7
Maintainability isimportant
Aswell asstaying pragmatic and getting stuff done!
@VasiliyZukanov 8
ThePareto principle (80-20rule)
80%of the effects come from 20%of thecauses
@VasiliyZukanov 9
Dependency Injection
@VasiliyZukanov 10
Dependencyinjection misconception
public class SomeClient {
private f i n a l SomeService mSomeService;
public SomeClient() {
mSomeService = new SomeService();
}
}
public class SomeClient {
private f i n a l SomeService mSomeService;
public SomeClient(SomeService someService) {
mSomeService = someService;
}
}
That’s bad becauseUNITTESTS!
(can’t replace the implementation)
That’s good becauseUNITTESTS
(can replace the implementation)
@VasiliyZukanov 11
So, no need for DIif you don’t unit test and neverreplaceimplementations?
Reusechallenge
@VasiliyZukanov 12
public class FetchCurrentUserUseCaseSync {
public FetchCurrentUserUseCaseSync(ParseUserConverter parseUserConverter,
ParseUsersRetriever parseUsersRetriever,
OfflineDetector offlineDetector,
MyLogger myLogger) {
. . .
}
@WorkerThread
public CurrentUser fetchCurrentUser() {
. . .
}
}
Toget current user’s info Ineed:
this client +4 services +3 transitive services =instantiate 8 objects
FetchCurrentUserUseCaseSyncis used in 14 different places!
Reusestrategies
@VasiliyZukanov 13
Manually instantiate 8 * 14 =112 objects
Reduceobjects count through code duplication(multiplication)
God Objects
Static calls and global static state (e.g.Singletons)
Dependency injection Pretty much guaranteed if you don’t useDI
DependencyInjection Architectural Pattern
Applica tio n
Construc t ion Set
class
Functional Set
class
integration
@VasiliyZukanov 14
Instantiation logic for eachservice is definedonce in constructionset,
and thenall classes from functional set simplyget the required dependencies from outside
DependencyInjection example
public class ClipSettingsFragment extends BaseFragment {
@Inject ViewMvcFactory mViewMvcFactory;
@Inject ClipSettingsController mController;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
getControllerComponent().inject(this);
super.onCreate(savedInstanceState);
}
@Nul l a b le
@Overri d e
public View onCreateView(@NonNull LayoutInflater i n f l a t e r,
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
. . .
}
. . .
}
Declare the requiredservices
Delegate resolution to Dagger
@VasiliyZukanov 15
Reusedtens of transitive dependencies; thousands of lines ofcode
Dependency Injection is very beneficial, but extremelyhard
to introduce into existingcode
@VasiliyZukanov 16
Adopt it from the onset of your new project!
Dagger dependency injection framework is the bestchoice
for most Android projectstoday
@VasiliyZukanov 17
Decoupled User InterfaceLogic
@VasiliyZukanov 18
Define application’s UI
Capture user’s interactions with theUI
@VasiliyZukanov 19
UI logic responsibilities
Why decouple UI logicspecifically?
@VasiliyZukanov 20
Detailed and accurate requirements (UImockups)
Much higher rate of change in most cases
Unreadable - verbose, messy,hacky,etc.
Easiest to test manually
Hardest to testautomatically
@VasiliyZukanov 21
UI logic characteristics
Decoupling of UI logic is the main rationalebehind
MVx presentation layer architecturalpatterns
@VasiliyZukanov 22
Kotlin Multiplatform?Jetpack Compose?
Example of decoupledUI
@VasiliyZukanov 23
More information about UI decoupling and MVx in my talk
from Droidcon Berlin2018
@VasiliyZukanov 24
Adopt some MVx at the beginning of a new project
Youcanchangeyour mind later*
@VasiliyZukanov 25
Package byfeature
@VasiliyZukanov 26
Top-level packagesshould correspond to core
concepts of app’sbusinessdomain
Package by featureexamples
Google IO2019 app
@VasiliyZukanov 27
Feature ≠screen
Clip playback
screen
Settings screen
Standalone domain features prevent
inter-dependenciesbetween
unrelated screens
@VasiliyZukanov 28
Looks like asingle “clips” feature…
…but…
Avoid preliminarymodularization
Feature packages are
straightforward to extractas
feature modules IFand
WHENthe need will arise
@VasiliyZukanov 29
As you add more features, you learn more about your
business domain
@VasiliyZukanov 30
Constantly refactor feature packagestoreflect your most
up-to-date understanding
Dependency Injection, MVx and Package-by-Feature willgive
you the “80% of architecture” on mostprojects
@VasiliyZukanov 31
Use the tools you’re familiarwith
@VasiliyZukanov 32
Questions
@VasiliyZukanov 33
My Android Development Courses
www.TechYourChance.com
@VasiliyZukanov 34
Thank you!
@VasiliyZukanov 35
References
@VasiliyZukanov 36
1. Making Architecture Matter (Martin Fowler) -https://youtu.be/DngAZyWMGR0
2. Dependency Injection in Android - https://www.techyourchance.com/dependency-injection-
android/
3. Activities and Fragments are not MVx Views (Vasiliy Zukanov)-
https://youtu.be/oOARoQr4H5U

More Related Content

PDF
Unirex Lean tools By Dario Carotenuto
GWTcon
 
PDF
Building Microservices with Micronaut: A Full-Stack JVM-Based Framework
Michael Redlich
 
PDF
The future of GWT 2.x - By Colin Alworth
GWTcon
 
PPTX
"Jclays, A global solution for application design and automatic GWT code gene...
GWTcon
 
PDF
New Android Project - The Most Important Decisions (Droidcon TLV 2019)
Vasiliy Zukanov
 
PDF
Activities and Fragments are not MVx views - Vasiliy Zukanov
DroidConTLV
 
PDF
Android Architecture Components Considered Harmful
Vasiliy Zukanov
 
PDF
Continuous (Non)-Functional Testing of Microservices on k8s
QAware GmbH
 
Unirex Lean tools By Dario Carotenuto
GWTcon
 
Building Microservices with Micronaut: A Full-Stack JVM-Based Framework
Michael Redlich
 
The future of GWT 2.x - By Colin Alworth
GWTcon
 
"Jclays, A global solution for application design and automatic GWT code gene...
GWTcon
 
New Android Project - The Most Important Decisions (Droidcon TLV 2019)
Vasiliy Zukanov
 
Activities and Fragments are not MVx views - Vasiliy Zukanov
DroidConTLV
 
Android Architecture Components Considered Harmful
Vasiliy Zukanov
 
Continuous (Non)-Functional Testing of Microservices on k8s
QAware GmbH
 

Similar to New Android Project: The Most Important Decisions - Vasiliy Zukanov (20)

PDF
State of DevOps - Build the Thing Right
Sergiu Bodiu
 
PDF
From User Action to Framework Reaction
jbandi
 
PDF
從系統思考看 DevOps:以 microservices 為例 (DevOps: a system dynamics perspective)
William Yeh
 
PDF
From User Action to Framework Reaction
Jonas Bandi
 
PPTX
JS FAST Prototyping with AngularJS & RequireJS
Yuriy Silvestrov
 
PDF
Micro service pitfalls voxxed days istanbul 2015
Mite Mitreski
 
PPTX
Architectures and techniques for a portable app
Diogo Cardoso
 
PDF
Building application in a "Microfrontends" way - Matthias Lauf *XConf Manchester
Thoughtworks
 
PDF
デベロッパーのためのAzureクラウドネイティブスタック 〜 提供したい価値からはじめる高速+高可用+高付加価値ソリューション
Yoichi Kawasaki
 
PPTX
Mobile App Architectures & Coding guidelines
Qamar Abbas
 
PDF
App specific app architecture
Petr Zvoníček
 
PPTX
Micro Front-End & Microservices - Plansoft
Miki Lombardi
 
PDF
iSAQB gathering 2021 keynote - Architectural patterns for rapid, reliable, fr...
Chris Richardson
 
PPT
TransitioningToMicroServonDocker_MS
Lana Kalashnyk
 
PPTX
Fast prototyping apps using AngularJS, RequireJS and Twitter Bootstrap
Yuriy Silvestrov
 
PDF
Dealing with large code bases. cd ams meetup
Viktor Sadovnikov
 
PDF
FRONTEND DEVELOPMENT WITH REACT.JS
IRJET Journal
 
PPTX
Uxdevsummit - Microservices the modern it stack- trends of tomorrow
Jonah Kowall
 
PDF
Continuous (Non-)Functional Testing of Microservices on K8s
QAware GmbH
 
PDF
Swiz DAO
devaraj ns
 
State of DevOps - Build the Thing Right
Sergiu Bodiu
 
From User Action to Framework Reaction
jbandi
 
從系統思考看 DevOps:以 microservices 為例 (DevOps: a system dynamics perspective)
William Yeh
 
From User Action to Framework Reaction
Jonas Bandi
 
JS FAST Prototyping with AngularJS & RequireJS
Yuriy Silvestrov
 
Micro service pitfalls voxxed days istanbul 2015
Mite Mitreski
 
Architectures and techniques for a portable app
Diogo Cardoso
 
Building application in a "Microfrontends" way - Matthias Lauf *XConf Manchester
Thoughtworks
 
デベロッパーのためのAzureクラウドネイティブスタック 〜 提供したい価値からはじめる高速+高可用+高付加価値ソリューション
Yoichi Kawasaki
 
Mobile App Architectures & Coding guidelines
Qamar Abbas
 
App specific app architecture
Petr Zvoníček
 
Micro Front-End & Microservices - Plansoft
Miki Lombardi
 
iSAQB gathering 2021 keynote - Architectural patterns for rapid, reliable, fr...
Chris Richardson
 
TransitioningToMicroServonDocker_MS
Lana Kalashnyk
 
Fast prototyping apps using AngularJS, RequireJS and Twitter Bootstrap
Yuriy Silvestrov
 
Dealing with large code bases. cd ams meetup
Viktor Sadovnikov
 
FRONTEND DEVELOPMENT WITH REACT.JS
IRJET Journal
 
Uxdevsummit - Microservices the modern it stack- trends of tomorrow
Jonah Kowall
 
Continuous (Non-)Functional Testing of Microservices on K8s
QAware GmbH
 
Swiz DAO
devaraj ns
 
Ad

More from DroidConTLV (20)

PDF
Mobile Development in the Information Age - Yossi Elkrief, Nike
DroidConTLV
 
PDF
Doing work in the background - Darryn Campbell, Zebra Technologies
DroidConTLV
 
PDF
No more video loss - Alex Rivkin, Motorola Solutions
DroidConTLV
 
PDF
Mobile at Scale: from startup to a big company - Dor Samet, Booking.com
DroidConTLV
 
PDF
LiveData on Steroids - Giora Shevach + Shahar Ben Moshe, Climacell
DroidConTLV
 
PDF
MVVM In real life - Lea Cohen Tannoudji, Lightricks
DroidConTLV
 
PDF
Best Practices for Using Mobile SDKs - Lilach Wagner, SafeDK (AppLovin)
DroidConTLV
 
PDF
Building Apps with Flutter - Hillel Coren, Invoice Ninja
DroidConTLV
 
PDF
Designing a Design System - Shai Mishali, Gett
DroidConTLV
 
PDF
The Mighty Power of the Accessibility Service - Guy Griv, Pepper
DroidConTLV
 
PDF
Kotlin Multiplatform in Action - Alexandr Pogrebnyak - IceRockDev
DroidConTLV
 
PDF
Flutter State Management - Moti Bartov, Tikal
DroidConTLV
 
PDF
Reactive UI in android - Gil Goldzweig Goldbaum, 10bis
DroidConTLV
 
PDF
Fun with flutter animations - Divyanshu Bhargava, GoHighLevel
DroidConTLV
 
PDF
DroidconTLV 2019
DroidConTLV
 
PDF
Ok google, it's time to bot! - Hadar Franco, Albert + Stav Levi, Monday
DroidConTLV
 
PDF
Introduction to React Native - Lev Vidrak, Wix
DroidConTLV
 
PDF
Bang-Bang, you have been hacked - Yonatan Levin, KolGene
DroidConTLV
 
PDF
Educating your app – adding ML edge to your apps - Maoz Tamir
DroidConTLV
 
PDF
Constraint-ly motion - making your app dance - John Hoford, Google
DroidConTLV
 
Mobile Development in the Information Age - Yossi Elkrief, Nike
DroidConTLV
 
Doing work in the background - Darryn Campbell, Zebra Technologies
DroidConTLV
 
No more video loss - Alex Rivkin, Motorola Solutions
DroidConTLV
 
Mobile at Scale: from startup to a big company - Dor Samet, Booking.com
DroidConTLV
 
LiveData on Steroids - Giora Shevach + Shahar Ben Moshe, Climacell
DroidConTLV
 
MVVM In real life - Lea Cohen Tannoudji, Lightricks
DroidConTLV
 
Best Practices for Using Mobile SDKs - Lilach Wagner, SafeDK (AppLovin)
DroidConTLV
 
Building Apps with Flutter - Hillel Coren, Invoice Ninja
DroidConTLV
 
Designing a Design System - Shai Mishali, Gett
DroidConTLV
 
The Mighty Power of the Accessibility Service - Guy Griv, Pepper
DroidConTLV
 
Kotlin Multiplatform in Action - Alexandr Pogrebnyak - IceRockDev
DroidConTLV
 
Flutter State Management - Moti Bartov, Tikal
DroidConTLV
 
Reactive UI in android - Gil Goldzweig Goldbaum, 10bis
DroidConTLV
 
Fun with flutter animations - Divyanshu Bhargava, GoHighLevel
DroidConTLV
 
DroidconTLV 2019
DroidConTLV
 
Ok google, it's time to bot! - Hadar Franco, Albert + Stav Levi, Monday
DroidConTLV
 
Introduction to React Native - Lev Vidrak, Wix
DroidConTLV
 
Bang-Bang, you have been hacked - Yonatan Levin, KolGene
DroidConTLV
 
Educating your app – adding ML edge to your apps - Maoz Tamir
DroidConTLV
 
Constraint-ly motion - making your app dance - John Hoford, Google
DroidConTLV
 
Ad

Recently uploaded (20)

PPTX
cloud computing vai.pptx for the project
vaibhavdobariyal79
 
PPTX
AI and Robotics for Human Well-being.pptx
JAYMIN SUTHAR
 
PDF
A Strategic Analysis of the MVNO Wave in Emerging Markets.pdf
IPLOOK Networks
 
PPTX
How to Build a Scalable Micro-Investing Platform in 2025 - A Founder’s Guide ...
Third Rock Techkno
 
PDF
Doc9.....................................
SofiaCollazos
 
PDF
Trying to figure out MCP by actually building an app from scratch with open s...
Julien SIMON
 
PDF
Event Presentation Google Cloud Next Extended 2025
minhtrietgect
 
PDF
Tea4chat - another LLM Project by Kerem Atam
a0m0rajab1
 
PDF
How Open Source Changed My Career by abdelrahman ismail
a0m0rajab1
 
PDF
This slide provides an overview Technology
mineshkharadi333
 
PDF
Software Development Methodologies in 2025
KodekX
 
PPTX
What-is-the-World-Wide-Web -- Introduction
tonifi9488
 
PDF
AI Unleashed - Shaping the Future -Starting Today - AIOUG Yatra 2025 - For Co...
Sandesh Rao
 
PDF
Orbitly Pitch Deck|A Mission-Driven Platform for Side Project Collaboration (...
zz41354899
 
PDF
Advances in Ultra High Voltage (UHV) Transmission and Distribution Systems.pdf
Nabajyoti Banik
 
PPTX
IoT Sensor Integration 2025 Powering Smart Tech and Industrial Automation.pptx
Rejig Digital
 
PDF
Architecture of the Future (09152021)
EdwardMeyman
 
PDF
How-Cloud-Computing-Impacts-Businesses-in-2025-and-Beyond.pdf
Artjoker Software Development Company
 
PPTX
Dev Dives: Automate, test, and deploy in one place—with Unified Developer Exp...
AndreeaTom
 
PPTX
Applied-Statistics-Mastering-Data-Driven-Decisions.pptx
parmaryashparmaryash
 
cloud computing vai.pptx for the project
vaibhavdobariyal79
 
AI and Robotics for Human Well-being.pptx
JAYMIN SUTHAR
 
A Strategic Analysis of the MVNO Wave in Emerging Markets.pdf
IPLOOK Networks
 
How to Build a Scalable Micro-Investing Platform in 2025 - A Founder’s Guide ...
Third Rock Techkno
 
Doc9.....................................
SofiaCollazos
 
Trying to figure out MCP by actually building an app from scratch with open s...
Julien SIMON
 
Event Presentation Google Cloud Next Extended 2025
minhtrietgect
 
Tea4chat - another LLM Project by Kerem Atam
a0m0rajab1
 
How Open Source Changed My Career by abdelrahman ismail
a0m0rajab1
 
This slide provides an overview Technology
mineshkharadi333
 
Software Development Methodologies in 2025
KodekX
 
What-is-the-World-Wide-Web -- Introduction
tonifi9488
 
AI Unleashed - Shaping the Future -Starting Today - AIOUG Yatra 2025 - For Co...
Sandesh Rao
 
Orbitly Pitch Deck|A Mission-Driven Platform for Side Project Collaboration (...
zz41354899
 
Advances in Ultra High Voltage (UHV) Transmission and Distribution Systems.pdf
Nabajyoti Banik
 
IoT Sensor Integration 2025 Powering Smart Tech and Industrial Automation.pptx
Rejig Digital
 
Architecture of the Future (09152021)
EdwardMeyman
 
How-Cloud-Computing-Impacts-Businesses-in-2025-and-Beyond.pdf
Artjoker Software Development Company
 
Dev Dives: Automate, test, and deploy in one place—with Unified Developer Exp...
AndreeaTom
 
Applied-Statistics-Mastering-Data-Driven-Decisions.pptx
parmaryashparmaryash
 

New Android Project: The Most Important Decisions - Vasiliy Zukanov

  • 1. New AndroidProject: TheMost ImportantDecisions Vasiliy Zukanov FreelanceAndroid developer & consultant Twitter: VasiliyZukanov Blog: TechYourChance.com
  • 2. Whostarted a new professional Android project in the past 3years? …past2 years? …pastyear? @VasiliyZukanov 2
  • 3. Which language, frameworks, libraries,practices,etc. should Iuse in a new project? @VasiliyZukanov 3 RxJava Kotlin Java Coroutines ViewModel Koin Dagger Navigation Conductor MVI MVVM MVP MVC AutoValue ConstraintLayout Timber ThreadPool LiveData Glide Fragment Single-activity WorkManager EventBus Gson Picasso Fresco Coil SqlDelight Room Moshi Firebase Flow Modularization
  • 5. “Architecture represents the significant design decisions that shape asystem, where significantis measured by cost of change. @VasiliyZukanov 5 Architecture – GradyBooch
  • 6. “Architecture is the set of decisions that are hard to change. @VasiliyZukanov 6 Architecture – Martin Fowler
  • 7. Architecture ≈ Subset of design decisions that affect the cost ofchange the most ≈ Maintainability! @VasiliyZukanov 7
  • 8. Maintainability isimportant Aswell asstaying pragmatic and getting stuff done! @VasiliyZukanov 8
  • 9. ThePareto principle (80-20rule) 80%of the effects come from 20%of thecauses @VasiliyZukanov 9
  • 11. Dependencyinjection misconception public class SomeClient { private f i n a l SomeService mSomeService; public SomeClient() { mSomeService = new SomeService(); } } public class SomeClient { private f i n a l SomeService mSomeService; public SomeClient(SomeService someService) { mSomeService = someService; } } That’s bad becauseUNITTESTS! (can’t replace the implementation) That’s good becauseUNITTESTS (can replace the implementation) @VasiliyZukanov 11 So, no need for DIif you don’t unit test and neverreplaceimplementations?
  • 12. Reusechallenge @VasiliyZukanov 12 public class FetchCurrentUserUseCaseSync { public FetchCurrentUserUseCaseSync(ParseUserConverter parseUserConverter, ParseUsersRetriever parseUsersRetriever, OfflineDetector offlineDetector, MyLogger myLogger) { . . . } @WorkerThread public CurrentUser fetchCurrentUser() { . . . } } Toget current user’s info Ineed: this client +4 services +3 transitive services =instantiate 8 objects FetchCurrentUserUseCaseSyncis used in 14 different places!
  • 13. Reusestrategies @VasiliyZukanov 13 Manually instantiate 8 * 14 =112 objects Reduceobjects count through code duplication(multiplication) God Objects Static calls and global static state (e.g.Singletons) Dependency injection Pretty much guaranteed if you don’t useDI
  • 14. DependencyInjection Architectural Pattern Applica tio n Construc t ion Set class Functional Set class integration @VasiliyZukanov 14 Instantiation logic for eachservice is definedonce in constructionset, and thenall classes from functional set simplyget the required dependencies from outside
  • 15. DependencyInjection example public class ClipSettingsFragment extends BaseFragment { @Inject ViewMvcFactory mViewMvcFactory; @Inject ClipSettingsController mController; @Override public void onCreate(@Nullable Bundle savedInstanceState) { getControllerComponent().inject(this); super.onCreate(savedInstanceState); } @Nul l a b le @Overri d e public View onCreateView(@NonNull LayoutInflater i n f l a t e r, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { . . . } . . . } Declare the requiredservices Delegate resolution to Dagger @VasiliyZukanov 15 Reusedtens of transitive dependencies; thousands of lines ofcode
  • 16. Dependency Injection is very beneficial, but extremelyhard to introduce into existingcode @VasiliyZukanov 16 Adopt it from the onset of your new project!
  • 17. Dagger dependency injection framework is the bestchoice for most Android projectstoday @VasiliyZukanov 17
  • 19. Define application’s UI Capture user’s interactions with theUI @VasiliyZukanov 19 UI logic responsibilities
  • 20. Why decouple UI logicspecifically? @VasiliyZukanov 20
  • 21. Detailed and accurate requirements (UImockups) Much higher rate of change in most cases Unreadable - verbose, messy,hacky,etc. Easiest to test manually Hardest to testautomatically @VasiliyZukanov 21 UI logic characteristics
  • 22. Decoupling of UI logic is the main rationalebehind MVx presentation layer architecturalpatterns @VasiliyZukanov 22
  • 23. Kotlin Multiplatform?Jetpack Compose? Example of decoupledUI @VasiliyZukanov 23
  • 24. More information about UI decoupling and MVx in my talk from Droidcon Berlin2018 @VasiliyZukanov 24
  • 25. Adopt some MVx at the beginning of a new project Youcanchangeyour mind later* @VasiliyZukanov 25
  • 26. Package byfeature @VasiliyZukanov 26 Top-level packagesshould correspond to core concepts of app’sbusinessdomain
  • 27. Package by featureexamples Google IO2019 app @VasiliyZukanov 27
  • 28. Feature ≠screen Clip playback screen Settings screen Standalone domain features prevent inter-dependenciesbetween unrelated screens @VasiliyZukanov 28 Looks like asingle “clips” feature… …but…
  • 29. Avoid preliminarymodularization Feature packages are straightforward to extractas feature modules IFand WHENthe need will arise @VasiliyZukanov 29
  • 30. As you add more features, you learn more about your business domain @VasiliyZukanov 30 Constantly refactor feature packagestoreflect your most up-to-date understanding
  • 31. Dependency Injection, MVx and Package-by-Feature willgive you the “80% of architecture” on mostprojects @VasiliyZukanov 31
  • 32. Use the tools you’re familiarwith @VasiliyZukanov 32
  • 34. My Android Development Courses www.TechYourChance.com @VasiliyZukanov 34
  • 36. References @VasiliyZukanov 36 1. Making Architecture Matter (Martin Fowler) -https://youtu.be/DngAZyWMGR0 2. Dependency Injection in Android - https://www.techyourchance.com/dependency-injection- android/ 3. Activities and Fragments are not MVx Views (Vasiliy Zukanov)- https://youtu.be/oOARoQr4H5U