4. "BECAUSE IF YOU DON’T, ONE DAY, DEBUGGING A
HUGE CLASS WITH DOZENS DIFFERENT THINGS,
YOU’LL FIND YOURSELF BEING UNABLE TO FIND
AND FIX ANY BUGS IN YOUR CLASS."
Someone who’s right
WHY CARE ABOUT IT? 4
5. WHY CARE ABOUT IT?
REASONS
▸ This class is the UIViewController subclass.
▸ Your data is stored directly in the UIViewController
▸ Your UIViews do almost nothing
▸ The Model is a dumb data structure
▸ Your Unit Tests cover nothing
5
6. WHY CARE ABOUT IT?
SO WHAT A GOOD ARCHITECTURE SHOULD HAVE?
▸ Balanced distribution of responsibilities among entities
with strict roles.
▸ Testability usually comes from the first feature.
▸ Ease of use and a low maintenance cost.
6
14. MVC - MODEL-VIEW-CONTROLLER
CONCLUSION
▸ Distribution of Responsibilities - View and controller tightly
coupled
▸ Testability - Only model is testable
▸ Ease of Use - Low amount of code. Everyone is familiar
with it.
14
16. What if I told you, the UIViewController is the View.
17. MVP - MODEL-VIEW-PRESENTER
MVC IN THE RIGHT WAY
PASSIVE VIEW
PRESENTER
MODELUpdates
Owns and updatesOwns and send actions
Notifies
17
18. MVP - MODEL-VIEW-PRESENTER
MVC IN THE RIGHT WAY
PASSIVE VIEW
PRESENTER
MODELUpdates
Owns and updatesOwns and send actions
Notifies
UIViewController
UIKit independent mediator
18
19. MVP - MODEL-VIEW-PRESENTER
CONCLUSION
▸ Distribution of Responsibilities - Most of responsibilities divided
between the Presenter and the Model, with the pretty dumb View
▸ Testability - Good, we can test most of the business logic due to
the dumb View
▸ Ease of Use - Substantial amount of code, although idea is very
clear
19
21. MVVM - MODEL-VIEW-VIEWMODEL
THE GREATEST OF THE MV(X) KIND
VIEW
VIEWMODEL
MODELUpdates
Owns and updatesOwns and send actions
Notifies
21
22. MVVM - MODEL-VIEW-VIEWMODEL
CONCLUSION
▸ Distribution of Responsibilities - Similar to MVP, but View
has more responsibilities than the MVP’s
▸ Testability - View Model knows nothing about the View, this
allows us to test it easily. The View might be also tested
▸ Ease of Use - It has almost the same amount of code as the
MVP
22
26. VIPER
CONCLUSION
▸ Distribution of Responsibilities - VIPER is a champion in
distribution of responsibilities.
▸ Testability - better distribution — better testability
▸ Ease of Use - You have to write huge amount of interface
for classes with very small responsibilities.
26
28. VIP
THE CLEAN ARCHITECTURE
VIEW PRESENTER
ENTITY
Updates
Process and deliver dataSend actions INTERACTOR
ROUTER
Knows about
Owns
28
29. VIP
THE CLEAN ARCHITECTURE
VIEW PRESENTER
ENTITY
Updates
Process and deliver dataSend actions INTERACTOR
ROUTER
Knows about
Owns
UIKit independent mediator Former Model
29
30. VIP
CONCLUSION
▸ Distribution of Responsibilities - VIP is as good as VIPER in
terms of distribution of responsibilities.
▸ Testability - Also comparable to VIPER
▸ Ease of Use - Great amount of classes with very small
responsibilities, but clearer than VIPER
30