Diciamo che abbiamo un'applicazione web (intranet) di piccole imprese per la gestione dei dati per i concessionari di automobili. Dispone di schermi per la gestione di clienti, inventario, ordini, garanzie e workshop.
Questa applicazione è installata su 10 siti di clienti per diversi rivenditori di automobili.
La prima versione di questa applicazione è stata creata senza alcun modo di fornire dati specifici del cliente. Ad esempio, se il concessionario A voleva essere in grado di allegare una foto a un cliente, il rivenditore B voleva aggiungere un contatto e-mail ad ogni officina e il concessionario C voleva allegare più rapporti PDF a una garanzia, ciascuna caratteristica come questa è stato aggiunto all'applicazione, quindi tutti i clienti hanno ricevuto tutto sul nuovo aggiornamento.
Tuttavia, questo porterà inevitabilmente a conflitti poiché il numero di clienti cresce man mano che i loro schemi di utilizzo sono unici e, se, per esempio, un rivenditore specifico ha richiesto di poter allegare (per qualche motivo) un colore dell'articolo in inventario (ed essere in grado di cercare con questo colore) come elemento richiesto, altri davvero non avrebbero bisogno di questa funzione e sicuramente non vorranno che sia un elemento richiesto. Oppure, un concessionario vorrebbe gestire i contatti e-mail per i propri dipendenti su una schermata separata dell'applicazione.
Immagino che una soluzione per questo sia usare una sorta di sistema di plugin, dove avremmo un nucleo dell'applicazione che fornisce funzionalità standard come clienti, inventario, ecc. e tutti i plugin installati dal cliente.
Esistono diversi tipi di plug-in: schermi standalone come contatti e-mail per i dipendenti, con la loro logica e plug-in per i clienti che estendono o decorano gli articoli dell'inventario (come foto o colori).
I plug-in di inventario (cliente, ordine, ...) richiedono una procedura di installazione, hook per il collegamento all'editor degli articoli, visualizzatore di voci, filtro degli articoli per la ricerca, hook di backup e così via.
È questo il modo giusto per risolvere questo problema?