forked from grafana/grafana
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Docs: Document backend package hierarchy model (grafana#31930)
* Docs: Document backend package hierarchy model Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>
- Loading branch information
Showing
1 changed file
with
16 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
# Package hierarchy | ||
|
||
The Go package hierarchy in Grafana should be organized logically (Ben Johnson's | ||
[article](https://medium.com/@benbjohnson/standard-package-layout-7cdbc8391fc1) 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. |