Search⌘ K

Updating the Composition Root of Each Module

Explore the streamlining module initialization to facilitate standalone microservice deployment while retaining flexibility for monolithic architecture.

We'll cover the following...

Every module uses a Startup() method to initialize itself to run with the resources that the monolith has provided. Our update will be a small one. We will be moving the code within Startup() to a new Root() function. Then, we create a call to it from Startup() and it will be as though nothing has changed:

func (m *Module) Startup(
ctx context.Context, mono system.Service,
) (err error) {
return Root(ctx, mono)
}
func Root(
ctx context.Context, svc system.Service,
) (err error) {
// ...
}
Calling a new Root() function from Startup()

This simple change will allow us to reuse the composition root code for the other method of running the module, running it as a standalone ...