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