Ich habe jetzt ein paar große, webbasierte Multi-Tenant-Produkte und sehr bald kann ich sehen, dass es eine Menge Anpassungen geben wird, die mandantenspezifisch sind.
Ein zusätzliches Feld hier oder da, vielleicht eine zusätzliche Seite oder eine zusätzliche Logik mitten in einem Workflow - so etwas.
Einige dieser Anpassungen können in das Kernprodukt übernommen werden, und das ist großartig. Einige von ihnen sind sehr spezifisch und würden allen anderen im Weg stehen.
Ich habe ein paar Ideen, um dies zu handhaben, aber keine davon scheint gut zu skalieren. Die naheliegende Lösung besteht in der Einführung einer Vielzahl von Einstellungen auf Client-Ebene, mit denen verschiedene "Funktionen" auf Client-Basis aktiviert werden können. Der Nachteil dabei ist natürlich die massive Komplexität und Unordnung. Sie könnten eine wirklich große Anzahl von Einstellungen vornehmen und im Laufe der Zeit könnten verschiedene Arten von Logik (Präsentation, Geschäft) außer Kontrolle geraten. Dann gibt es das Problem der kundenspezifischen Felder, die nach etwas Besserem verlangen, als nur eine Reihe von nullfähigen Feldern zu den vorhandenen Tabellen hinzuzufügen.
Was tun die Leute, um das zu handhaben? Force.com scheint der Meister der Erweiterbarkeit zu sein. Offensichtlich haben sie von Grund auf eine Plattform geschaffen, die super erweiterbar ist. Über die webbasierte Benutzeroberfläche können Sie fast alles ergänzen. FogBugz hat etwas Ähnliches gemacht, bei dem sie ein robustes Plugin-Modell erstellt haben, das, wenn man es sich überlegt, tatsächlich von Force inspiriert sein könnte. Ich weiß, dass sie viel Zeit und Geld dafür aufgewendet haben, und wenn ich mich nicht irre, war die Absicht, es tatsächlich intern für die zukünftige Produktentwicklung zu verwenden.
Hört sich so an, als könnte ich versucht sein, etwas zu bauen, sollte es aber wahrscheinlich nicht. :)
Ist eine massive Investition in steckbare Architektur der einzige Weg? Wie gehen Sie mit diesen Problemen um und welche Ergebnisse sehen Sie?
EDIT: Es sieht so aus, als hätte FogBugz das Problem gelöst, indem er eine ziemlich robuste Plattform erstellt und diese dann verwendet, um ihre Bildschirme zusammenzustellen. Zum Erweitern erstellen Sie eine DLL mit Klassen, die Schnittstellen wie ISearchScreenGridColumn implementieren und zu einem Modul werden. Ich bin mir sicher, es war enorm teuer zu bauen, wenn man bedenkt, dass sie viele Entwickler haben und monatelang daran gearbeitet haben, und dass ihre Oberfläche vielleicht 5% der Größe meiner Anwendung beträgt.
Im Moment frage ich mich ernsthaft, ob Force.com der richtige Weg ist, damit umzugehen. Und ich bin ein hartgesottener ASP.Net-Typ, also ist dies eine seltsame Position, in der ich mich wiederfinde.