Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Eric Torreborre
Practical
Eff monad
Doing it for real
About Zalando
Brand solutions
Article service
Articleservice
Zeos
products
business-partners
stocks
59.95 €
10 items
How to deal?
Components!
DI?
Cake?
Guice?
Spring?
Radical
Constructor
injection!
Grafter
HttpServer
Routes
Services
Clients
PriceHttpService
PriceHttp4sService
Always one default
In a
library?
reader
all the
way down!
Unit testing?
Integration testing?
HttpServer
Routes
Services
Clients
HttpServer
Routes
Services
Clients
Tree rewriting!
Kiama
Singleton?
HttpServer
Routes
Services
Clients
HttpServer
Routes
Services
Clients
Stay lazy!
Start order?
lazy
reader
rewrite
start
Eff please!
Out of the box
Reader
Eval
Async
State
ThrowableEither
Writer
Article service
FlowId
HttpServer
Routes
Services
Clients
flowId
flowId
flowId
flowId
Logged
Applicative
Concurrent
execution
MasterData PriceService
Inventory
Async
Eff in Eff!
Future Monix
No applicative
for-comprehension
FlowId
Logged
Async
Eval
Mitsaeks we made
Errors
3 possibilities
1 error style per layer
Translation between layers
HttpServer
Routes
Services
Clients
Client level
Service level
Service level
Service level
Local Effects!
Everything is
a (Free) DSL?
Make price request
request
[PriceRequest]
[PriceRequest]
response
Interpret request
[PriceRequest, Async]
[Async]
Get price
price
[Async]
[Async]
Time: effect or
component?
Get status
status
[Eval]
now?
[Eval]
now
Get status
status
[Eval]
now?
[Eval]
now FreezedTime
Get status
status
[Eval, Timed]
runFreezedTime(status)
[Eval]
Recap
More
Applicative
Goodies!
Batching
Translation
client
Inventory
Translation
client
Inventory
Audited
Logs Database Event
Bus
Rate
limiting
Create
Intercept
Interpret
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Pratical eff
Upcoming SlideShare
Loading in …5
×

Pratical eff

874 views

Published on

How we use the Eff monad at Zalando in addition to a components strategy using github.com/zalando/grafter

Published in: Technology
  • Be the first to comment

Pratical eff

  1. 1. Eric Torreborre Practical Eff monad Doing it for real
  2. 2. About Zalando
  3. 3. Brand solutions
  4. 4. Article service
  5. 5. Articleservice Zeos products business-partners stocks 59.95 € 10 items
  6. 6. How to deal?
  7. 7. Components!
  8. 8. DI?
  9. 9. Cake?
  10. 10. Guice?
  11. 11. Spring?
  12. 12. Radical
  13. 13. Constructor injection!
  14. 14. Grafter
  15. 15. HttpServer Routes Services Clients
  16. 16. PriceHttpService PriceHttp4sService
  17. 17. Always one default
  18. 18. In a library?
  19. 19. reader all the way down!
  20. 20. Unit testing?
  21. 21. Integration testing?
  22. 22. HttpServer Routes Services Clients
  23. 23. HttpServer Routes Services Clients
  24. 24. Tree rewriting!
  25. 25. Kiama
  26. 26. Singleton?
  27. 27. HttpServer Routes Services Clients
  28. 28. HttpServer Routes Services Clients
  29. 29. Stay lazy!
  30. 30. Start order?
  31. 31. lazy reader rewrite start
  32. 32. Eff please!
  33. 33. Out of the box
  34. 34. Reader Eval Async State ThrowableEither Writer
  35. 35. Article service
  36. 36. FlowId
  37. 37. HttpServer Routes Services Clients flowId flowId flowId flowId
  38. 38. Logged
  39. 39. Applicative
  40. 40. Concurrent execution
  41. 41. MasterData PriceService Inventory
  42. 42. Async
  43. 43. Eff in Eff!
  44. 44. Future Monix
  45. 45. No applicative for-comprehension
  46. 46. FlowId Logged Async Eval
  47. 47. Mitsaeks we made
  48. 48. Errors
  49. 49. 3 possibilities
  50. 50. 1 error style per layer Translation between layers
  51. 51. HttpServer Routes Services Clients
  52. 52. Client level
  53. 53. Service level
  54. 54. Service level
  55. 55. Service level
  56. 56. Local Effects!
  57. 57. Everything is a (Free) DSL?
  58. 58. Make price request request [PriceRequest] [PriceRequest] response Interpret request [PriceRequest, Async] [Async]
  59. 59. Get price price [Async] [Async]
  60. 60. Time: effect or component?
  61. 61. Get status status [Eval] now? [Eval] now
  62. 62. Get status status [Eval] now? [Eval] now FreezedTime
  63. 63. Get status status [Eval, Timed] runFreezedTime(status) [Eval]
  64. 64. Recap
  65. 65. More Applicative Goodies!
  66. 66. Batching
  67. 67. Translation client Inventory
  68. 68. Translation client Inventory
  69. 69. Audited
  70. 70. Logs Database Event Bus
  71. 71. Rate limiting
  72. 72. Create Intercept Interpret

×