domenica 4 maggio 2014

Software: Plugin o Adapter ?

Parlando di software,  si fa un po' troppa confusione nell'utilizzo dei termini Plugin e Adapter anche se il significato è evidentemente diverso.

Spesso le 2 parole vengono assimilate impropriamente, associate ed utilizzate per far riferimento a dei componenti software che implementano caratteristiche di trasporto e trasformazione dati. La cosa non è sempre corretta.
Vediamo meglio il significato e quali sono le differenze.

Cos'è un Plugin

Un Plugin software è un modulo secondario, aggiuntivo, in grado di estendere le funzionalità di un modulo software primario. 
Un plugin quindi non può funzionare autonomamente ma deve essere innestato all'interno di un'applicazione container principale predisposta per ospitarlo. 

Il software principale può essere una applicazione già di per se consistente, quindi che effettua operazioni complesse ed esaustive, oppure un Framework il cui solo scopo è quello di ospitare dei plugin mettendo a loro disposizione una infrastruttura comune. 

Rispetto al modulo primario, un plugin ne eredità i meccanismi generali di base e li estende implementando le funzioni più specifiche per le quali è stato progettato. 

La predisposizione di un software ad essere esteso mediante plugin è generalmente considerata una cosa molto positiva.
Le sue funzionalità infatti possono essere fatte evolvere più facilmente, allungando di fatto il ciclo di vita dell'applicazione stessa e favorendone la diffusione in ambiti applicativi diversi. 

Come detto in precedenza, un plugin software viene rilasciato all'interno del programma principale, che lo riconosce come un proprio componente, pertanto deve essere realizzato ed installato rispettando fedelmente le direttive di sviluppo imposte per quel determinato container. 

Di solito, per facilitare la realizzazione di nuovi plugin, l'azienda o la community che produce il software fornisce le specifiche tecniche di dettaglio da seguire (specifiche di interfaccia) oppure sempre più spesso rilascia ai developer un Toolkit con tutti gli strumenti necessari per lo sviluppo (documentazione, script,  editor, tools accessori, ecc. ) . 

I plugin possono essere di infinite tipologie, essere progettati per gestire le più diverse funzionalità.
Nel caso che interessa di più nel seguito dell'articolo, vengono realizzati per gestire le connessioni con altre applicazioni o con risorse esterne.
Molti sistemi abilitano l'installazione di plugin al fine di consentire l'implementazione dei protocolli di comunicazione (standard o custom) necessari per connettersi ad altri sistemi, database o middleware.
Tipicamente, quando si mette in opera un sistema in ambito enterprise, le funzionalità vengono estese mediante plugin specializzati per gestire le integrazioni che hanno protocolli particolari.


Cos'è un Adapter 

Un Adapter software è un modulo applicativo che veicola dati e li converte da un protocollo/formato ad un altro. Serve a rendere interoperabili applicazioni o risorse diverse in un determinato contesto operativo.

Tipicamente è un programma adattatore che, mettendo a disposizione delle funzionalità specifiche, consente ad un applicativo client di accedere a delle risorse esterne (servizi di altri sistemi o database).
Un adapter espone delle interfacce conosciute ed utilizzate dal sistema client per integrarsi con un altro sistema il cui protocollo è invece ad esso sconosciuto, non raggiungibile o non gestibile in altro modo.
Di solito si parla di adapter quando una applicazione non può essere estesa con un nuovo plugin di connettività e quindi è necessario sviluppare un software bridge esterno che effettui la mediazione verso la risorsa che interessa.



Conclusioni

Non sempre è possibile realizzare un adapter sviluppando un plugin, l'architettura interna del software potrebbe non permetterlo oppure potrebbero esserci incompatibilità tecniche che ne limitano l'estendibilità in quel contesto.
Più frequentemente, quando si parla di adapter si intende un componente software esterno alla applicazione principale, autonomo, che ha una propria autoconsistenza indipendentemente dai sistemi che lo usano.

Analogamente, riferendosi ad un plugin, non si intende sempre un oggetto con funzioni di adapter (in tal caso plugin adapter), in quanto può implementare anche un qualsiasi altro tipo di funzionalità o algoritmo. E' un pezzo di software calato in una infrastruttura più grande rispettando le interfacce predisposte.