Ответ 1
Это вопрос дизайна, поэтому мой ответ будет высоким.
Многопользовательская клиентская веб-приложение на стороне клиента будет иметь следующие переменные, большинство из которых вы уже упоминали. Вы должны принять два широких подхода относительно того, как действовать.
Положите, какие изменения в каждой из перечисленных ниже переменных (насколько это возможно).
Подход a). Если вы считаете, что изменения в переменных для арендатора manageable
создают 1 приложение, которое обрабатывает всех арендаторов. Что такое manageable
? Вы можете выполнить одно упражнение, выполнив Обработка изменений в переменных ниже. Посмотрите, можете ли вы управлять вещами на metadata
. Это понимается путем понимания различий между арендаторами для каждой переменной.
Подход b). Если вы считаете, что вариации слишком много, пересмотр этих отдельных приложений. Когда вы идете, вы можете найти какую-то общность. Вы можете повторно использовать этот код в качестве общего модуля и выставлять его как артефакт (частный).
Подход a) Обработка вариаций в переменных
1) Look and Feel - Skin Используйте один CSS для каждого арендатора.
2) Данные Если схема JSON отличается, у вас есть проблема. Я бы предложил просто перейти к подходу b). Если вы видите добавленные поля + вычитаемые, вы в порядке. Очень рекомендую создать схему JSON.
3) Формы ввода Я рекомендую управлять Формами из схемы JSON + некоторые метаданные. Сможете ли вы использовать тот же самый храм AngularJS со множеством ng-if, ng-switch для вариантов арендатора? Если нет, то перейдите к отдельной ФОРМЕ. Вы попадаете в слишком много таких "отдельных ФОРМ"? Затем вы вернетесь к подходу b).
4) Проверка формы
Вы можете использовать схему JSON и украсить ее атрибутами проверки. (Не знаю, что предлагает ваш стек, но в Java Bean аннотации проверки довольно удобны - вы можете их экстернализировать во время сборки и связывать их с клиентом, чтобы поля ввода форм могли иметь правильное применение валидации из схемы.)
5) Рабочий процесс Если вы видите, что логика маршрутизации изменяется на каждого клиента - используйте маршрутизаторы angular и укажите маршруты для каждого арендатора.
6) Отчетность Предполагая, что это некоторые взгляды, которые учитываются для каждого арендатора. Насколько они отличаются? Если вы можете использовать ng-if/ng-switch, не загромождая шаблоны, вы можете пойти иначе, создайте отдельные шаблоны, представления (маршруты могут заботиться о представлениях).
7) i18n/l10n У AngularJS есть куча утилит, таких как $locale, ngPluralize, различные фильтры, такие как валюта, данные, число. Оформить заказ AngularJS i18n
В целом хороший дизайн metadata
, Validation decorated JSON schema
и good routing ([AngularJS routing ][2]) design
поможет вам сохранить одно приложение с несколькими арендаторами, которым вы можете управлять в течение всего срока службы продукта.