pratical eff

120
Eric Torreborre Practical Eff monad Doing it for real

Upload: eric-torreborre

Post on 24-Jan-2017

36 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Pratical eff

Eric Torreborre

Practical Eff monad

Doing it for real

Page 2: Pratical eff
Page 3: Pratical eff
Page 4: Pratical eff

About Zalando

Page 5: Pratical eff

Brand solutions

Page 6: Pratical eff

Article service

Page 7: Pratical eff

Artic

le s

ervic

e

Zeos

products

business-partners

stocks

59.95 € 10 items

Page 8: Pratical eff

How to deal?

Page 9: Pratical eff

Components!

Page 10: Pratical eff
Page 11: Pratical eff

DI?

Page 12: Pratical eff

Cake?

Page 13: Pratical eff

Guice?

Page 14: Pratical eff

Spring?

Page 15: Pratical eff

Radical

Page 16: Pratical eff

Constructor injection!

Page 17: Pratical eff
Page 18: Pratical eff
Page 19: Pratical eff

Grafter

Page 20: Pratical eff
Page 21: Pratical eff
Page 22: Pratical eff
Page 23: Pratical eff

HttpServer

Routes

Services

Clients

Page 24: Pratical eff
Page 25: Pratical eff

PriceHttpService

PriceHttp4sService

Page 26: Pratical eff
Page 27: Pratical eff

Always one default

Page 28: Pratical eff

In a library?

Page 29: Pratical eff
Page 30: Pratical eff

readerall the

way down!

Page 31: Pratical eff

Unit testing?

Page 32: Pratical eff

Integration testing?

Page 33: Pratical eff

HttpServer

Routes

Services

Clients

Page 34: Pratical eff

HttpServer

Routes

Services

Clients

Page 35: Pratical eff

Tree rewriting!

Page 36: Pratical eff

Kiama

Page 37: Pratical eff
Page 38: Pratical eff
Page 39: Pratical eff

Singleton?

Page 40: Pratical eff

HttpServer

Routes

Services

Clients

Page 41: Pratical eff

HttpServer

Routes

Services

Clients

Page 42: Pratical eff
Page 43: Pratical eff

Stay lazy!

Page 44: Pratical eff
Page 45: Pratical eff

Start order?

Page 46: Pratical eff
Page 47: Pratical eff
Page 48: Pratical eff

lazy

reader

rewrite

start

Page 49: Pratical eff

Eff please!

Page 50: Pratical eff
Page 51: Pratical eff
Page 52: Pratical eff
Page 53: Pratical eff
Page 54: Pratical eff

Out of the box

Page 55: Pratical eff
Page 56: Pratical eff

Reader

Eval

Async

State

ThrowableEither

Writer

Page 57: Pratical eff

Article service

Page 58: Pratical eff

FlowId

Page 59: Pratical eff

HttpServer

Routes

Services

Clients

flowId

flowId

flowId

flowId

Page 60: Pratical eff
Page 61: Pratical eff

Logged

Page 62: Pratical eff
Page 63: Pratical eff
Page 64: Pratical eff
Page 65: Pratical eff
Page 66: Pratical eff

Applicative

Page 67: Pratical eff

Concurrent execution

Page 68: Pratical eff

MasterData PriceService

Inventory

Page 69: Pratical eff
Page 70: Pratical eff
Page 71: Pratical eff

Async

Page 72: Pratical eff
Page 73: Pratical eff

Eff in Eff!

Page 74: Pratical eff

Future Monix

Page 75: Pratical eff

No applicative for-comprehension

Page 76: Pratical eff

FlowId

Logged

Async

Eval

Page 77: Pratical eff

Mitsaeks we made

Page 78: Pratical eff

Errors

Page 79: Pratical eff

3 possibilities

Page 80: Pratical eff

1 error style per layer

Translation between layers

Page 81: Pratical eff

HttpServer

Routes

Services

Clients

Page 82: Pratical eff

Client level

Page 83: Pratical eff

Service level

Page 84: Pratical eff

Service level

Page 85: Pratical eff

Service level

Page 86: Pratical eff

Local Effects!

Page 87: Pratical eff

Everything is a (Free) DSL?

Page 88: Pratical eff
Page 89: Pratical eff

Make price request

request

[PriceRequest]

[PriceRequest]

response

Interpret request[PriceRequest, Async]

[Async]

Page 90: Pratical eff
Page 91: Pratical eff

Get price

price

[Async]

[Async]

Page 92: Pratical eff
Page 93: Pratical eff

Time: effect or component?

Page 94: Pratical eff

Get status

status

[Eval]

now?[Eval]

now

Page 95: Pratical eff

Get status

status

[Eval]

now?[Eval]

now FreezedTime

Page 96: Pratical eff

Get status

status

[Eval, Timed]

runFreezedTime(status)[Eval]

Page 97: Pratical eff

Recap

Page 98: Pratical eff
Page 99: Pratical eff
Page 100: Pratical eff
Page 101: Pratical eff

More Applicative Goodies!

Page 102: Pratical eff

Batching

Page 103: Pratical eff

Translation client

Inventory

Page 104: Pratical eff

Translation client

Inventory

Page 105: Pratical eff
Page 106: Pratical eff
Page 107: Pratical eff
Page 108: Pratical eff
Page 109: Pratical eff

Audited

Page 110: Pratical eff
Page 111: Pratical eff
Page 112: Pratical eff

Logs Database Event Bus

Page 113: Pratical eff
Page 114: Pratical eff
Page 115: Pratical eff

Rate limiting

Page 116: Pratical eff
Page 117: Pratical eff
Page 118: Pratical eff
Page 119: Pratical eff

Create

Intercept

Interpret

Page 120: Pratical eff