Aggiunta del metodo `get_like` alla classe PluginStore

Il modello prevede l’uso del campo key nella tabella plugin_store_rows per memorizzare sia uno spazio dei nomi sia un identificatore univoco, ovvero:

<namespace>_<id>

Questo modello è meno frequente nei plugin core di Discourse oggi, con un calo generale nell’uso di PluginStore, ad esempio:

Tuttavia, viene ancora utilizzato in alcuni contesti, inclusa la codebase core di Discourse stessa, ad esempio nel modello Reviewables.

Anch’io utilizzo questo modello in numerosi plugin.

Il motivo principale per cui si usa questo modello è che la tabella plugin_store_rows è utilizzata da più plugin (e da alcuni servizi core), quindi le colonne identificative, ovvero id e plugin_name, non possono essere impiegate per l’identificazione interna all’interno di ciascun sistema che utilizza PluginStore. Di conseguenza, nel campo key viene adottato un sistema basato su stringhe.

Per quanto riguarda la modifica della struttura del database all’interno di un plugin, @gdpelican ha un ottimo post a riguardo:

Personalmente, sono ancora molto cauto nel farlo, poiché lavorando su un plugin di terze parti non hai il controllo sul namespace, sulla rimozione del tuo plugin o su eventuali modifiche conflittuali apportate al core di Discourse.

Come menziona @gdpelican, devi fornire un modo per gli utenti del plugin per rimuovere le modifiche al database se disinstallano il plugin.

Fornisci un metodo per gli utenti per pulire le modifiche al database se non vogliono più il tuo plugin. L’ho fatto con un task rake.

Ritengo che questo sia troppo tecnico per la maggior parte degli utenti dei plugin e rappresenti un rischio se non sono a conoscenza di questo dettaglio.

Inoltre, non ho ancora riscontrato un reale bisogno di uscire dai limiti di PluginStore e CustomFields.

Detto questo, personalmente sarei favorevole all’introduzione di un nuovo metodo in PluginStore, in quanto trovo utile questo modello.

@david Sarei interessato anche alle tue riflessioni su quanto sopra.