Flamingo Module Structure

Module structure

Modules that contain business logic of some kind should:

  • by itself responsible for a clear concern / bounded context
  • have as less as possible dependencies to other modules
  • implement ports and adapters and therefore follow the naming and structure conventions.

For a quick reference:

moduleName
│   module.go (The entry for a Flamingo module)
│   README.md (The full documentation)
│
└───domain (technology free domain logic with secondary ports)      
│   
└───application (main modules use cases / programmers "API")
│
└───interfaces (interfaces to the outside)
│   └───controller (web and data controllers)
│   └───templatefunctions (templatefunctions)
│
└───infrastructure (implementation of secondary ports)
│   └───adapterExample.go (e.g. an adapter to an external microservice)

For more read Ports and Adapters Architecture

Flamingo Module initialisation

Each Flamingo module should have a module.go in the root folder.

Here you typically:

  • provide the Module Type with its Configure method as an entry to configure your module
  • use Dingo (dependency injection) for Binding your types.
  • register Routes and Handlers
  • provide Default Configurations
  • register Flamingo Commands, template functions and event listeners