grafana/contribute/architecture/backend/package-hierarchy.md
Arve Knudsen 6081c00119
Docs: Document backend package hierarchy model (#31930)
* Docs: Document backend package hierarchy model

Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>
2021-03-16 10:49:01 +01:00

878 B

Package hierarchy

The Go package hierarchy in Grafana should be organized logically (Ben Johnson's article served as inspiration), according to the following principles:

  • Domain types and interfaces should be in "root" packages (not necessarily at the very top, of the hierarchy, but logical roots)
  • Sub-packages should depend on roots - sub-packages here typically contain implementations, for example of services

Practical example

The pkg/plugins package contains plugin domain types, for example DataPlugin, and also interfaces such as RequestHandler. Then you have the pkg/plugins/managers subpackage, which contains concrete implementations such as the service PluginManager. The subpackage pkg/plugins/backendplugin/coreplugin contains plugins.DataPlugin implementations.