40 lines
1.5 KiB
ReStructuredText
40 lines
1.5 KiB
ReStructuredText
|
|
||
|
Architecture
|
||
|
============
|
||
|
|
||
|
:term:`Providers<provider>` are similar to a "plugin" concept in that
|
||
|
multiple providers may be installed by different
|
||
|
:term:`packages<package>`. But whereas plugins are typically limited
|
||
|
to a particular interface (method list/signatures etc.) a provider can
|
||
|
also "bolt on" entirely new methods which may be used elsewhere in the
|
||
|
:term:`app`.
|
||
|
|
||
|
In that sense providers can perhaps be more accurately thought of as
|
||
|
"extensions" rather than plugins.
|
||
|
|
||
|
Providers may be related to :term:`handlers<handler>` in some cases,
|
||
|
but not all. But whereas there is only *one handler* configured for a
|
||
|
given portion of the app, multiple providers of the same type would
|
||
|
*all contribute* to the overall app. In other words they are always
|
||
|
enabled if installed. (Some may require a :term:`config setting` to
|
||
|
be "active" - but that is up to each provider.)
|
||
|
|
||
|
There can be many "types" of providers; each pertains to a certain
|
||
|
aspect of the overall app. A given type of provider will apply to a
|
||
|
certain "parent" class.
|
||
|
|
||
|
|
||
|
What a Provider Does
|
||
|
--------------------
|
||
|
|
||
|
Each type of provider pertains to a certain parent class. The app
|
||
|
itself will define the need for a provider type.
|
||
|
|
||
|
For instance there might be a "dashboard" class which can show various
|
||
|
blocks of info (charts etc.). Providers might be used to supplement the
|
||
|
parent dashboard class, by adding extra blocks to the display.
|
||
|
|
||
|
But in that example, providers look an awful lot like plugins.
|
||
|
|
||
|
For a better (and real) example see :doc:`app`.
|