Сейчас у меня есть несколько крупных мультитенантных продуктов на основе Интернета, и очень скоро я вижу, что будет много настроек, специфичных для арендаторов.
Дополнительное поле здесь или там, может быть, дополнительная страница или какая-то дополнительная логика в середине рабочего процесса - такие вещи.
Некоторые из этих настроек могут быть включены в основной продукт, и это здорово. Некоторые из них очень специфичны и мешают другим.
У меня есть несколько идей для управления этим, но ни одна из них, кажется, не масштабируется. Очевидное решение состоит в том, чтобы ввести массу настроек на уровне клиента, позволяющих включать различные «функции» для каждого клиента. Недостатком этого является, конечно, огромная сложность и беспорядок. Вы можете ввести действительно огромное количество настроек, и со временем различные типы логики (презентация, бизнес) могут выйти из-под контроля. Затем возникает проблема специфичных для клиента полей, которая требует чего-то более чистого, чем просто добавление множества пустых полей в существующие таблицы.
Так что люди делают, чтобы справиться с этим? Force.com, кажется, мастер расширяемости; очевидно, они создали платформу с нуля, которая является супер расширяемой. Вы можете добавить практически все что угодно с помощью веб-интерфейса. FogBugz сделал нечто похожее на то, что они создали надежную модель плагина, которая, если подумать, на самом деле могла быть вдохновлена Force. Я знаю, что они потратили на это много времени и денег, и если я не ошибаюсь, намерение было на самом деле использовать его для дальнейшей разработки продукта.
Звучит так, как будто я мог соблазниться, но, вероятно, не должен. :)
Являются ли огромные инвестиции в сменную архитектуру единственным выходом? Как вы справляетесь с этими проблемами, и какие результаты вы видите?
РЕДАКТИРОВАТЬ: Похоже, что FogBugz справился с проблемой, построив довольно надежную платформу, а затем использовать его, чтобы собрать свои экраны. Чтобы расширить его, вы создаете DLL, содержащую классы, которые реализуют интерфейсы, такие как ISearchScreenGridColumn, и это становится модулем. Я уверен, что его сборка была чрезвычайно дорогой, учитывая, что у них есть большое количество разработчиков, и они работали над этим месяцами, плюс их площадь поверхности составляет, возможно, 5% от размера моего приложения.
Сейчас я серьезно задаюсь вопросом, является ли Force.com правильным способом справиться с этим. И я - опытный парень из ASP.Net, так что это странная позиция, в которой я могу оказаться.