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`.
							 |