48
VIPER for everybody DAMJAN VUJAKLIJ A DAMJAN.VUJAKLIJ [email protected], @DAMJANVUJAKLIJ A

Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

  • Upload
    infinum

  • View
    169

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

VIPER for everybody

DAMJAN VUJAKLIJA DAMJAN.VUJAKLIJ[email protected], @DAMJANVUJAKLIJA

Page 2: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

00CHALLENGES

Page 3: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

CAN WE FIND AN ARCHITECTURE THAT IS:

• maintanable and testable

• handles Apple’s MVC problem

• can be adopted by our entire iOS team

• plays well with Swift

Page 4: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

MVC

Page 5: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

MVC BY APPLE

Page 6: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija
Page 7: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

MVP

Page 8: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

MVVM

Page 9: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

VIPER

Page 10: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

01VIPER COMPONENTS

Page 11: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

VIPER

• Router, Entity, Presenter, Interactor, View

• good separation of concerns

• responsibilities can be grouped into two categories: when to

do something and how to do something

Page 12: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

WIREFRAME (ROUTER)

Page 13: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

WIREFRAME (ROUTER)

• knows how to navigate

Page 14: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

WIREFRAME (ROUTER)

• knows how to navigate

• knows how to setup module components

Page 15: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

PRESENTER

Page 16: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

PRESENTER

• knows when to navigate

Page 17: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

PRESENTER

• knows when to navigate

• knows when to fetch data

Page 18: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

PRESENTER

• knows when to navigate

• knows when to fetch data

• knows when to present data

Page 19: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

VIEW

Page 20: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

VIEW

• knows how to present data

Page 21: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

VIEW

• knows how to present data

• knows how to delegate user interactions

Page 22: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

INTERACTOR

Page 23: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

INTERACTOR

• knows how to fetch and prepare data

Page 24: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

ENTITY

• knows how to hold data (actually is data)

Page 25: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

WHEN AND HOW RESPONSIBILITIES

• roughly put, when is the gist of the application business logic, and how is

most often implementation details

Page 26: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

WHEN AND HOW RESPONSIBILITIES

• roughly put, when is the gist of the application business logic, and how is

most often implementation details

• this means presenters define most of your apps behaviour

Page 27: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

WHEN AND HOW RESPONSIBILITIES

• roughly put, when is the gist of the application business logic, and how is

most often implementation details

• this means presenters define most of your apps behaviour

• interactos define business data logic (enterprise business logic)

Page 28: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

02TAILORING VIPER

Page 29: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

CLEANLINESS IS NEXT TO GODLINESS…

Page 30: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

…A LITTLE DIRT GOES A LONG WAY.

Page 31: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

MODULE LIFECYCLE

• wireframe → presenter →view

• view → presenter → wireframe

Page 32: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

THE ‘I’ IN VIPER IS COOL AND ALL, BUT…

• ditch the interactors if they’re giving you too much trouble

and communicate directlly with an APIHandler/services/…

• work with instances and not classes for networking to ease

mocking

Page 33: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

03COMMUNICATION

Page 34: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

WIREFRAME & PRESENTER

Page 35: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

PRESENTER & VIEW

Page 36: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

PRESENTER & INTERACTOR

Page 37: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

04TOOLS

Page 38: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

TOOLS

• project generator

• module generator

Page 39: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija
Page 40: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

VEKI SAYS: “YOU’RE WELCOME.”

Page 41: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

05ISSUES

Page 42: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

• method proxying

• data passing between modules

• storyboards

• child view controllers

COMMON ISSUES

Page 43: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

THINGS THAT BIT US IN THE ASS

• one wireframe for multiple screens (modules)

• wireframe → presenter →view

• protocol hell

• retain cycles

Page 44: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

06CONCLUSION

Page 45: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

NO SILVER BULLET… …NO S*** SHERLOCK!

Page 46: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

USE REASON AND AVOID EARLY OPTIMISATION AND OVER-ENGENEERING.

Page 47: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

A LOT OF GOOD READS

• http://mutualmobile.github.io/blog/2013/12/04/viper-

introduction/

• https://medium.com/ios-os-x-development/ios-

architecture-patterns-ecba4c38de52#.kxg3vn6lm

• https://www.objc.io/issues/13-architecture/viper/

• https://swifting.io/blog/2016/03/07/8-viper-to-be-

or-not-to-be/

• http://blog.soat.fr/2015/09/developper-en-ios-allegez-

vos-uiviewcontrollers-soc-separation-of-concerns/

• https://github.com/thoughtbot/liftoff

Page 48: Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija

07Q&A