Sono in procinto di progettare un'architettura per un'applicazione basata su plugin e ho alcune domande su come gestire l'accesso al database e la registrazione. L'obiettivo della mia applicazione è quello di consentire a un dispositivo che la mia azienda produce di inviare messaggi su qualsiasi numero di protocolli di terze parti e su qualsiasi numero di dispositivi di terze parti. A causa della natura della mia applicazione, ho bisogno di registrare ogni messaggio che viene inviato tramite il mio sistema in modo ragionevole.
Ecco cosa sto pensando sul lato Database: ci sarà una tabella di messaggi globale che memorizza tutti i dati agnostici di implementazione che abbiamo, e quindi ci sarà una tabella (o una serie di tabelle) per ogni plugin di messaggistica come definito dal writer del plugin che fa riferimento alla tabella dei messaggi globali tramite una chiave esterna.
Gestisce questi altri tavoli che ho difficoltà a capire come progettare in modo sicuro. Da un lato, non voglio particolarmente dare ai plugin pieno accesso al database (voglio che abbiano il minor numero possibile di privilegi), dall'altro voglio che gli sviluppatori di plugin abbiano pieno dominio per registrare qualsiasi dato bisogno di tabelle che definiscono in modo simile a come funzionano i plugin in Wordpress. Inoltre, non voglio che la registrazione al database sia facoltativa: una buona registrazione è fondamentale per la mia applicazione.
Cose che ho considerato:
- Progettazione di un'infrastruttura di logging che consente a un plugin di definire (magari in un file XML) le tabelle di cui ha bisogno nel DB e una mappatura tra quelle tabelle e oggetti che restituiranno e utilizzando tali mapping e definizioni di tabella per scrivere su il DB i risultati delle chiamate di metodo.
- Stabilire una convenzione di denominazione per le stored procedure nel DB che ciascun plugin deve definire quando definisce le proprie tabelle e chiama automaticamente le stored procedure dopo aver inviato un messaggio.
- Consentendo a ciascun plug-in di implementare un metodo di registrazione che restituisce una stringa contenente la query SQL appropriata.
Ciascuna delle soluzioni di cui sopra mi rende un po 'a disagio, ma non sono sicuro di quali altri approcci potrebbero esistere. Qualche suggerimento?
Dettagli di implementazione: Sto scrivendo la mia domanda in Java e sto usando una soluzione plug-in fatta a mano, quindi ho una discreta quantità di flessibilità. Poiché non è stato scritto nessuno del codice reale (a parte qualche codice di dimostrazione del concetto che è solo per riferimento), posso apportare modifiche al mio piano abbastanza grandi senza costi elevati.