add kubectl factory conventions

This commit is contained in:
deads2k 2016-12-15 13:15:18 -05:00
parent 52e237a093
commit 15d8d13f08
1 changed files with 16 additions and 0 deletions

View File

@ -13,6 +13,7 @@ Updated: 8/27/2015
- [Flag conventions](#flag-conventions)
- [Output conventions](#output-conventions)
- [Documentation conventions](#documentation-conventions)
- [kubectl Factory conventions](#kubectl-Factory-conventions)
- [Command implementation conventions](#command-implementation-conventions)
- [Generators](#generators)
@ -245,6 +246,21 @@ rather than "RESOURCE" or "KIND"
* Use "NAME" for resource names
## kubectl Factory conventions
The kubectl `Factory` is a large interface which is used to provide access to clients,
polymorphic inspection, and polymorphic mutation. The `Factory` is layered in
"rings" in which one ring may reference inner rings, but not peers or outer rings.
This is done to allow composition by extenders.
In order for composers to be able to provide alternative factory implementations
they need to provide low level pieces of *certain* functions so that when the factory
calls back into itself it uses the custom version of the function. Rather than try
to enumerate everything that someone would want to override we split the factory into
rings, where each ring can depend on methods an earlier ring, but cannot depend upon
peer methods in its own ring.
## Command implementation conventions
For every command there should be a `NewCmd<CommandName>` function that creates