Ora ho alcuni grandi prodotti multi-tenant basati sul web e molto presto vedo che ci saranno molte personalizzazioni specifiche per i tenant.
Un campo in più qua 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 integrate nel prodotto principale, ed è fantastico. Alcuni di loro sono altamente specifici e si metterebbero in mezzo a tutti gli altri.
Ho alcune idee in mente per gestirlo, ma nessuna sembra ridimensionarsi bene. La soluzione ovvia è introdurre una tonnellata di impostazioni a livello di client, consentendo di abilitare varie "funzionalità" su base per cliente. Il rovescio della medaglia con questo, ovviamente, è la massiccia complessità e disordine. Potresti introdurre un numero davvero enorme di impostazioni e nel tempo vari tipi di logica (presentazione, business) potrebbero sfuggire di mano. Quindi c'è il problema dei campi specifici del cliente, che richiede qualcosa di più pulito rispetto al semplice aggiungere un mucchio di campi nullable alle tabelle esistenti.
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. Puoi aggiungere qualsiasi cosa con la loro interfaccia utente basata sul web. FogBugz ha fatto qualcosa di simile in cui ha creato un robusto modello di plug-in che, a pensarci bene, potrebbe essere stato effettivamente ispirato da Force. So che ci hanno speso molto tempo e denaro e, se non sbaglio, l'intenzione era di usarlo internamente per lo sviluppo futuro del prodotto.
Sembra il tipo di cosa che potrei essere tentato di costruire, ma probabilmente non dovrei. :)
Un massiccio investimento in architettura collegabile è l'unica strada da percorrere? Come gestisci questi problemi e che tipo di risultati stai vedendo?
EDIT: Sembra che FogBugz abbia gestito il problema costruendo una piattaforma abbastanza robusta e quindi utilizzandola 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 sia stato incredibilmente costoso da costruire considerando che hanno molti sviluppatori e ci hanno lavorato per mesi, inoltre la loro superficie è forse il 5% delle dimensioni della mia applicazione.
In questo momento mi chiedo seriamente se Force.com è il modo giusto per gestirlo. E io sono un ragazzo ASP.Net hard core, quindi questa è una posizione strana in cui trovarmi.