Slide 1

Slide 1 text

Advanced Dependency Management in Go using Fx Preslav Mihaylov

Slide 2

Slide 2 text

Software Engineer @ Uber Tech. Trainer & Speaker ✍ Blogging at pmihaylov.com ‍ Open-sourcing at github.com/preslavmihaylov

Slide 3

Slide 3 text

3 Advanced Dependency Management in Go using Fx Preslav Mihaylov 00/00/2020 Here’s what’s coming... Managing Component Dependencies via Manual Wiring Using Dependency Injection and Fx Framework Structuring code into reusable Fx modules

Slide 4

Slide 4 text

Managing Component Dependencies via Manual Wiring

Slide 5

Slide 5 text

5 Advanced Dependency Management in Go using Fx Preslav Mihaylov 00/00/2020 Manual Wiring == Manually Injecting Dependencies

Slide 6

Slide 6 text

6 Advanced Dependency Management in Go using Fx Preslav Mihaylov 00/00/2020 An Example Hello World Web Application DEMO

Slide 7

Slide 7 text

7 Advanced Dependency Management in Go using Fx Preslav Mihaylov 00/00/2020 Manual Wiring - Pros & Cons Code is easy to understand No magic behind the scenes Hard to maintain for large projects Every project has to deal with the “things every service needs”

Slide 8

Slide 8 text

Using Dependency Injection and Fx Framework

Slide 9

Slide 9 text

9 Advanced Dependency Management in Go using Fx Preslav Mihaylov 00/00/2020 Fx == Dependency Injection App Framework

Slide 10

Slide 10 text

10 Advanced Dependency Management in Go using Fx Preslav Mihaylov 00/00/2020 Fx == DI Application Framework DI Framework? Component wiring is done automatically for you App Framework? The entire app lifecycle is managed rather than it being a plug-n-use library

Slide 11

Slide 11 text

11 Advanced Dependency Management in Go using Fx Preslav Mihaylov 00/00/2020 So, what does it do?

Slide 12

Slide 12 text

12 Advanced Dependency Management in Go using Fx Preslav Mihaylov 00/00/2020 At its core, it simply manages providers and receivers

Slide 13

Slide 13 text

13 Advanced Dependency Management in Go using Fx Preslav Mihaylov 00/00/2020 Providers say “Here’s an instance of this component. Use it as you please…”

Slide 14

Slide 14 text

14 Advanced Dependency Management in Go using Fx Preslav Mihaylov 00/00/2020 Receivers say “I need an instance of components X, Y, Z. Please provide them to me…”

Slide 15

Slide 15 text

15 Advanced Dependency Management in Go using Fx Preslav Mihaylov 00/00/2020 What Fx does is to connect providers to receivers

Slide 16

Slide 16 text

16 Advanced Dependency Management in Go using Fx Preslav Mihaylov 00/00/2020 Refactoring our Web App DEMO

Slide 17

Slide 17 text

17 Advanced Dependency Management in Go using Fx Preslav Mihaylov 00/00/2020 Using a DI Framework - Pros & Cons Component Wiring is MUCH easier Less code => Less work Enables reusable modules Project onboarding is tougher Harder to debug & trace apps

Slide 18

Slide 18 text

Structuring Your Code Into Reusable Fx Modules

Slide 19

Slide 19 text

19 Advanced Dependency Management in Go using Fx Preslav Mihaylov 00/00/2020 Fx Modules allow you to extract code into separate independent layers/packages

Slide 20

Slide 20 text

20 Advanced Dependency Management in Go using Fx Preslav Mihaylov 00/00/2020 However, they are especially useful in a microservice environment

Slide 21

Slide 21 text

21 Advanced Dependency Management in Go using Fx Preslav Mihaylov 00/00/2020 All services need some baseline infra health checks, logging, tracing, metrics, configs...

Slide 22

Slide 22 text

22 Advanced Dependency Management in Go using Fx Preslav Mihaylov 00/00/2020 Accounting Tax Calculations Trip Dispatcher Infrastructure Module Infrastructure Module Infrastructure Module

Slide 23

Slide 23 text

23 Advanced Dependency Management in Go using Fx Preslav Mihaylov 00/00/2020 Modularizing our Web App DEMO

Slide 24

Slide 24 text

Conclusion

Slide 25

Slide 25 text

25 Advanced Dependency Management in Go using Fx Preslav Mihaylov 00/00/2020 Manual wiring works well for small to medium-size apps

Slide 26

Slide 26 text

26 Advanced Dependency Management in Go using Fx Preslav Mihaylov 00/00/2020 A Dependency Injection Framework (Fx) allows your servicce to scale \w more components

Slide 27

Slide 27 text

27 Advanced Dependency Management in Go using Fx Preslav Mihaylov 00/00/2020 Modularizing your Application enables your services to reuse common dependencies you to create boundaries across your application

Slide 28

Slide 28 text

28 Advanced Dependency Management in Go using Fx Preslav Mihaylov 00/00/2020 Wanna go the extra mile? Practice setting up & using Fx here and here See how it’s done in Java by Google

Slide 29

Slide 29 text

29 Talk’s name - Speaker 00/00/2020 Powered by Preslav Mihaylov [email protected]