let drawing = ...
let projectedSample = projectNextTouchSample(drawing.actions.last!.samples)
var projectedDrawing = drawing
projectedDrawing.actions.last!.append(projectedSample)
renderDrawing(projectedDrawing)
Slide 44
Slide 44 text
MOCKING
Slide 45
Slide 45 text
THE 3 I'S
1. INERT
2. ISOLATED
3. INTERCHANGEABLE
Slide 46
Slide 46 text
*
Slide 47
Slide 47 text
*
struct Hmmmm {
let someData: Int
let aView: UIView
}
Slide 48
Slide 48 text
1. THE VALUE OF VALUES
2. THE OBJECT OF OBJECTS
3. EVERYTHING IN ITS PLACE
Slide 49
Slide 49 text
2. THE OBJECT OF OBJECTS
Slide 50
Slide 50 text
OBJECTS BEHAVE AND
RESPOND
Slide 51
Slide 51 text
BUT VALUES ARE DEAD
Slide 52
Slide 52 text
No content
Slide 53
Slide 53 text
MANY DEAD VALUES
CAN MAKE
ONE LIVING IDENTITY
Slide 54
Slide 54 text
class CanvasController {
var currentDrawing: Drawing
/* ... */
}
struct Drawing { /* ... */ }
Slide 55
Slide 55 text
STATE: AN IDENTITY'S VALUE
AT SOME TIME
Slide 56
Slide 56 text
VALUE: INERT DATA
(DRAWING)
IDENTITY: VALUES RELATED IN TIME
(DRAWING) > (DRAWING) > (DRAWING) > (DRAWING)
STATE: AN IDENTITY'S VALUE AT SOME TIME
(DRAWING) > (DRAWING) > (DRAWING) > (DRAWING)
Slide 57
Slide 57 text
SO, OBJECTS
Slide 58
Slide 58 text
OBJECTS
REPRESENT IDENTITY
MANAGE STATE TRANSITIONS
PERFORM SIDE EFFECTS
Slide 59
Slide 59 text
class CanvasController {
var currentDrawing: Drawing
func handleTouch(touch: UITouch) {
currentDrawing = ...
}
}
Slide 60
Slide 60 text
1. THE VALUE OF VALUES
2. THE OBJECT OF OBJECTS
3. EVERYTHING IN ITS PLACE
Slide 61
Slide 61 text
3. EVERYTHING IN ITS PLACE
Slide 62
Slide 62 text
OBJECT LAYER
VALUE LAYER
Slide 63
Slide 63 text
OBJECT LAYER
VALUE LAYER
Slide 64
Slide 64 text
WHY SEPARATE?
Slide 65
Slide 65 text
“SEPARATE LOGIC FROM ACTION”
Slide 66
Slide 66 text
THE VALUE GAME
Slide 67
Slide 67 text
THE VALUE GAME
MAXIMIZE THE VALUE LAYER
Slide 68
Slide 68 text
1. Incorporate touch into Drawing
Slide 69
Slide 69 text
1. Incorporate touch into Drawing
2. Estimate touch velocity