Slide 1

Slide 1 text

A DOMAIN DRIVEN APPROACH TO KOTLIN'S NEW TYPES PACO ESTEVEZ

Slide 2

Slide 2 text

FROM CLASSES TO TYPES EAT YOUR VEGGIES

Slide 3

Slide 3 text

CLASSES ENCAPSULATE DATA AND BEHAVIOUR. Classic OOP

Slide 4

Slide 4 text

DATA

Slide 5

Slide 5 text

DATA PROBLEMS ▸ Beans and not Beans ▸ Immutability ▸ Nullables and validation ▸ equals(), hashCode(), and toString()

Slide 6

Slide 6 text

DATA CLASSES IN KOTLIN ▸ Synthetic accessors ▸ val for immutable, var for mutable ▸ Nullable types and Default values ▸ data qualifier: all of the above plus equals(), hashCode() and toString()

Slide 7

Slide 7 text

BEHAVIOUR

Slide 8

Slide 8 text

HERE BE MONSTERS BEHAVIOUR IN JAVA

Slide 9

Slide 9 text

DOMAIN DRIVEN DESIGN WITH TYPES ▸ Separate data from behaviour

Slide 10

Slide 10 text

DOMAIN DRIVEN DESIGN WITH TYPES ▸ Separate data from behaviour ▸ Express execution flows as data

Slide 11

Slide 11 text

DOMAIN DRIVEN DESIGN WITH TYPES ▸ Separate data from behaviour ▸ Express execution flows as data ▸ Encode behaviour in types

Slide 12

Slide 12 text

DOMAIN DRIVEN DESIGN WITH TYPES ▸ Separate data from behaviour ▸ Express execution flows as data ▸ Encode behaviour in types ▸ Make illegal states unrepresentable

Slide 13

Slide 13 text

DOMAIN DRIVEN DESIGN WITH TYPES ▸ Separate data from behaviour ▸ Express execution flows as data ▸ Encode behaviour in types ▸ Make illegal states unrepresentable ▸ Push validation to edges

Slide 14

Slide 14 text

SEALED CLASSES BEHAVIOUR IN KOTLIN

Slide 15

Slide 15 text

SEALED CLASSES IN KOTLIN ▸ Closed inheritance ▸ Requires dereferencing using when() -> is ▸ Data classes and implement interfaces (1.1) ▸ Type alias (1.1)

Slide 16

Slide 16 text

WHAT IF I CAN’T USE KOTLIN? JAVA 8 ▸ JavaSealedUnions JAVA 6 ▸ RxSealedUnions SCALA ▸ You should be on stage pacoworks.com/ @fe_hudl github.com/pakoito