"universal programming recipes", kateryna trofimenko

104
Universal programming recipes Kateryna Trofimenko iOS developer

Upload: badoo-development

Post on 22-Jan-2018

740 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: "Universal programming recipes", Kateryna Trofimenko

Universal programming recipes

Kateryna Trofimenko iOS developer

Page 2: "Universal programming recipes", Kateryna Trofimenko

What do we do?

Page 3: "Universal programming recipes", Kateryna Trofimenko

What do we do?

Application

Page 4: "Universal programming recipes", Kateryna Trofimenko

What do we do?

ApplicationService

Page 5: "Universal programming recipes", Kateryna Trofimenko

What do we do?

ApplicationServicePlatform

Page 6: "Universal programming recipes", Kateryna Trofimenko

What do we do?

ApplicationServicePlatformUser experience

Page 7: "Universal programming recipes", Kateryna Trofimenko

What are the properties of good code?

Page 8: "Universal programming recipes", Kateryna Trofimenko

Clean

Page 9: "Universal programming recipes", Kateryna Trofimenko

Structured

Page 10: "Universal programming recipes", Kateryna Trofimenko

Readable and well documented

Page 11: "Universal programming recipes", Kateryna Trofimenko

Testable

Page 12: "Universal programming recipes", Kateryna Trofimenko

Working

Difference engine by Charles Babbage

Page 13: "Universal programming recipes", Kateryna Trofimenko

Patterns

Page 14: "Universal programming recipes", Kateryna Trofimenko

Patterns

a general solution to a problem

Page 15: "Universal programming recipes", Kateryna Trofimenko

Patterns

a general solution to a problem

a reusable architectural outline

Page 16: "Universal programming recipes", Kateryna Trofimenko

Delegate

Page 17: "Universal programming recipes", Kateryna Trofimenko

Delegate

Customise behaviour without subclassing

Page 18: "Universal programming recipes", Kateryna Trofimenko

DelegateCustomise behaviour without subclassing

UIApplication UIApplicationDelegate

Page 19: "Universal programming recipes", Kateryna Trofimenko

Data Source

Page 20: "Universal programming recipes", Kateryna Trofimenko

Data Source

Customise data retrieval without subclassing

Page 21: "Universal programming recipes", Kateryna Trofimenko

Data SourceCustomise data retrieval without subclassing

UITableView DataSource

Page 22: "Universal programming recipes", Kateryna Trofimenko

Data SourceCustomise data retrieval without subclassing

UITableView DataSource

UICollectionView DataSource

Page 23: "Universal programming recipes", Kateryna Trofimenko

Data SourceCustomise data retrieval without subclassing

UITableView DataSource

UICollectionView DataSource

UIPickerView DataSource

Page 24: "Universal programming recipes", Kateryna Trofimenko

Data SourceCustomise data retrieval without subclassing

section count cells count

headers cells

UITableView DataSource

Page 25: "Universal programming recipes", Kateryna Trofimenko

Target - Action

Page 26: "Universal programming recipes", Kateryna Trofimenko

Target - Action

A consistent way to connect controls to custom logic

Page 27: "Universal programming recipes", Kateryna Trofimenko

Target - ActionA consistent way to connect controls to custom logic

UIButton

@IBAction func buttonAction(sender: AnyObject)

button.addTarget(self, action: "buttonAction", forControlEvents: .TouchUpInside)

Page 28: "Universal programming recipes", Kateryna Trofimenko

Target - ActionA consistent way to connect controls to custom logic

UISwitcher

switcher.addTarget(self, action: "switchAction", forControlEvents: .ValueChanged)

Page 29: "Universal programming recipes", Kateryna Trofimenko

Target - ActionA consistent way to connect controls to custom logic

UIGestureRecognizer

gestureRecognizer.addTarget(self, action: "tapGestureAction")

Page 30: "Universal programming recipes", Kateryna Trofimenko

Responder chain

Page 31: "Universal programming recipes", Kateryna Trofimenko

Responder chainHandle events without knowledge of which object will be used

Page 32: "Universal programming recipes", Kateryna Trofimenko

Responder chainHandle events without knowledge of which object will be used

useraction

Page 33: "Universal programming recipes", Kateryna Trofimenko

Responder chainHandle events without knowledge of which object will be used

useraction UIView

Page 34: "Universal programming recipes", Kateryna Trofimenko

Responder chainHandle events without knowledge of which object will be used

useraction UIView

UIView

Page 35: "Universal programming recipes", Kateryna Trofimenko

Responder chainHandle events without knowledge of which object will be used

useraction UIView

UIView

UIView

UIView

Page 36: "Universal programming recipes", Kateryna Trofimenko

Composite

Page 37: "Universal programming recipes", Kateryna Trofimenko

Composite

Manipulate a group of objects as a single object

Page 38: "Universal programming recipes", Kateryna Trofimenko

CompositeManipulate a group of objects as a single object

UIView

Page 39: "Universal programming recipes", Kateryna Trofimenko

CompositeManipulate a group of objects as a single object

UIView

UIView

UIView

UIView

Page 40: "Universal programming recipes", Kateryna Trofimenko

CompositeManipulate a group of objects as a single object

UIViewUIView

UIView

UIView

Page 41: "Universal programming recipes", Kateryna Trofimenko

CompositeManipulate a group of objects as a single object

UIView

UIView

UIView

UIView

Page 42: "Universal programming recipes", Kateryna Trofimenko

MVC

Page 43: "Universal programming recipes", Kateryna Trofimenko

MVC

Model View

Controller

Page 44: "Universal programming recipes", Kateryna Trofimenko

MVC

Model View

Controller

Updates

User actionsNotifications

Page 45: "Universal programming recipes", Kateryna Trofimenko

More…

Page 46: "Universal programming recipes", Kateryna Trofimenko

More…

MVP

Page 47: "Universal programming recipes", Kateryna Trofimenko

More…

MVPMVVM

Page 48: "Universal programming recipes", Kateryna Trofimenko

More…

MVPMVVMVIPER

Page 49: "Universal programming recipes", Kateryna Trofimenko

iOS Architecture Patterns

bit.ly/iOS_Patterns

Bohdan Orlov iOS developer

Page 50: "Universal programming recipes", Kateryna Trofimenko

Sprint #1:

Page 51: "Universal programming recipes", Kateryna Trofimenko

Sprint #3:

Page 52: "Universal programming recipes", Kateryna Trofimenko

Sprint #5:

Page 53: "Universal programming recipes", Kateryna Trofimenko

Sprint #10:

Page 54: "Universal programming recipes", Kateryna Trofimenko

Sprint #11:

Page 55: "Universal programming recipes", Kateryna Trofimenko

Sprint #12:

Page 56: "Universal programming recipes", Kateryna Trofimenko

Sprint #13:

Page 57: "Universal programming recipes", Kateryna Trofimenko

Sprint #13:

Page 58: "Universal programming recipes", Kateryna Trofimenko

Sprint #13:

Page 59: "Universal programming recipes", Kateryna Trofimenko

Refactoring!

Page 60: "Universal programming recipes", Kateryna Trofimenko
Page 61: "Universal programming recipes", Kateryna Trofimenko

Information Flow

Page 62: "Universal programming recipes", Kateryna Trofimenko
Page 63: "Universal programming recipes", Kateryna Trofimenko

find the truth

Page 64: "Universal programming recipes", Kateryna Trofimenko

find the truth

ask why, not how

Page 65: "Universal programming recipes", Kateryna Trofimenko

Clear responsibilities

Page 66: "Universal programming recipes", Kateryna Trofimenko
Page 67: "Universal programming recipes", Kateryna Trofimenko
Page 68: "Universal programming recipes", Kateryna Trofimenko
Page 69: "Universal programming recipes", Kateryna Trofimenko
Page 70: "Universal programming recipes", Kateryna Trofimenko

Profile View Controller

Input validator

Page 71: "Universal programming recipes", Kateryna Trofimenko

Profile View Controller

Input validator

Chat View Controller

Input validator

Page 72: "Universal programming recipes", Kateryna Trofimenko

Profile View Controller

Input validator

Chat View Controller

Page 73: "Universal programming recipes", Kateryna Trofimenko

Input validator Tests

Page 74: "Universal programming recipes", Kateryna Trofimenko

Mutation

Page 75: "Universal programming recipes", Kateryna Trofimenko

Mutation

Page 76: "Universal programming recipes", Kateryna Trofimenko

Mutation

Page 77: "Universal programming recipes", Kateryna Trofimenko

Mutation

Page 78: "Universal programming recipes", Kateryna Trofimenko

Mutation

Page 79: "Universal programming recipes", Kateryna Trofimenko

Mutation

Page 80: "Universal programming recipes", Kateryna Trofimenko

Mutation

Page 81: "Universal programming recipes", Kateryna Trofimenko

Mutation

Page 82: "Universal programming recipes", Kateryna Trofimenko

Simplify with immutability

Page 83: "Universal programming recipes", Kateryna Trofimenko

Simplify with immutability

Page 84: "Universal programming recipes", Kateryna Trofimenko

Simplify with immutability

Page 85: "Universal programming recipes", Kateryna Trofimenko

Simplify with immutability

Page 86: "Universal programming recipes", Kateryna Trofimenko

Simplify with immutability

Page 87: "Universal programming recipes", Kateryna Trofimenko

Simplify with immutability

Page 88: "Universal programming recipes", Kateryna Trofimenko

Feature flags

Page 89: "Universal programming recipes", Kateryna Trofimenko

Feature flags

Page 90: "Universal programming recipes", Kateryna Trofimenko

Feature flags

Page 91: "Universal programming recipes", Kateryna Trofimenko

Feature flags

Page 92: "Universal programming recipes", Kateryna Trofimenko

Feature flags

Page 93: "Universal programming recipes", Kateryna Trofimenko

Feature flags

Page 94: "Universal programming recipes", Kateryna Trofimenko

Feature flags

Page 95: "Universal programming recipes", Kateryna Trofimenko

Core iOS Application Architectural Patterns bit.ly/wwdc2014-224

Advanced iOS Application Architecture and Patterns bit.ly/wwdc2014-229

Designing Intuitive User Experiences bit.ly/wwdc2014-211

Protocol-Oriented Programming in Swift bit.ly/wwdc2015-408

Page 96: "Universal programming recipes", Kateryna Trofimenko
Page 97: "Universal programming recipes", Kateryna Trofimenko

• developer.apple.com • iosdevweekly.com • ios-goodies.com • natashatherobot.com • swiftnews.curated.co • mikeash.com/pyblog • www.objc.io • nshipster.com • www.jessesquires.com • yalantis.com/blog/category/programming/ • lists.swift.org/pipermail/swift-users/ • lists.swift.org/pipermail/swift-evolution/

Page 98: "Universal programming recipes", Kateryna Trofimenko

Veronica Ray Cathy Birdy Erica Sadun

Ayaka Nonaka Mike Ash

Ash Furrow Andy Matuschak

Chris Eidhof

Marcin Krzyzanowski Ørta

Peter Steinberger Javier Soto Nate Cook

Felix Krause Ray Wenderlich

A. Nelson-Hornstein

Page 99: "Universal programming recipes", Kateryna Trofimenko

2007

Page 100: "Universal programming recipes", Kateryna Trofimenko

2007 2008

Page 101: "Universal programming recipes", Kateryna Trofimenko

2007 2008 2010

Page 102: "Universal programming recipes", Kateryna Trofimenko

2007 2008 2010 2014

Page 103: "Universal programming recipes", Kateryna Trofimenko

2007 2008 2010 2014

Professions that don’t exist - yet!

Page 104: "Universal programming recipes", Kateryna Trofimenko

techblog.badoo.com

BadooTech @BadooTech

[email protected]

kutusha @_fima346

Badoo