Ora ho alcuni grandi prodotti multi-tenant basati sul Web e molto presto vedrò che ci saranno molte personalizzazioni specifiche per i titolari.
Un campo in più qui o là, forse una pagina in più o qualche logica in più nel mezzo di un flusso di lavoro - quel genere di cose.
Alcune di queste personalizzazioni possono essere implementate nel prodotto principale, ed è grandioso. Alcuni di loro sono altamente specifici e si inseriscono in tutti gli altri.
Ho in mente alcune idee per gestirlo, ma nessuno di loro sembra scalare bene. La soluzione ovvia consiste nell'introdurre un sacco di impostazioni a livello di client, consentendo l'attivazione di varie 'funzionalità' su base client. Il lato negativo di questo, ovviamente, è la complessità e il disordine. Potresti introdurre un numero davvero enorme di impostazioni e nel tempo vari tipi di logica (presentazione, business) potrebbero sfuggire di mano. Poi c'è il problema dei campi specifici del client, che chiede qualcosa di più pulito che aggiungere semplicemente un mucchio di campi nullable alle tabelle esistenti.
Quindi cosa stanno facendo le persone per gestirlo? Force.com sembra essere il maestro dell'estensibilità; ovviamente hanno creato una piattaforma da zero che è super-estensibile. È possibile aggiungere a quasi qualsiasi cosa con la loro interfaccia utente basata sul web. FogBugz ha fatto qualcosa di simile dove hanno creato un modello di plugin robusto che, a pensarci bene, potrebbe essere stato effettivamente ispirato da Force. So che hanno speso un sacco di tempo e denaro e, se non sbaglio, l'intenzione era di utilizzarla internamente per lo sviluppo del prodotto futuro.
Sembra il genere di cosa che potrei essere tentato di costruire ma probabilmente non dovrebbe. :)
L'enorme investimento nell'architettura pluggable è l'unico modo per andare? Come stai gestendo questi problemi e che tipo di risultati stai vedendo?
EDIT: Sembra che FogBugz abbia gestito il problema costruendo una piattaforma abbastanza solida e usandolo per mettere insieme i loro schermi. Per estenderlo si crea una DLL contenente classi che implementano interfacce come ISearchScreenGridColumn e che diventa un modulo. Sono sicuro che è stato tremendamente costoso da costruire considerando che hanno un grande numero di sviluppatori e ci hanno lavorato per mesi, in più la loro superficie è forse il 5% della dimensione della mia applicazione.
In questo momento mi sto seriamente chiedendo se Force.com sia il modo giusto per gestirlo. E io sono un ragazzo di ASP.Net, molto duro, quindi questa è una posizione strana in cui trovarmi.