У меня есть короткий концептуальный вопрос:
Недавно я начал разрабатывать приложение, в котором я могу (на лету) создавать клиентов, которые, в свою очередь, могут создавать проекты, в которых есть много других вещей (собственные логины и т. д.).
Структура URL - это "example.com/client1/project1", чтобы пользователи могли войти в их проект.Пока все хорошо, мне удалось все это с DB-моделью и маршрутизацией и т. Д.
Пример структуры:
-> Client -> Project -> User
-> Forum -> Topic -> Post
-> Message
-> Setting
-> [...] (you get the gist)
Однако будет только несколькоклиентов (<15), поэтому мне было интересно, если бы было лучше использовать папку приложения SEPARATE и БД для каждого клиента.Потому что таким образом, я также смогу развернуть обновления для каждого клиента отдельно. </p>
Вот мои начальные мысли по этому вопросу (для отдельных установок):
Pro: отдельные приложения
- Возможность развертывания обновлений и новых функций отдельно для каждого клиента (вполне возможно, что некоторые новые функции нежелательны для некоторых клиентов)
- Ошибка в одной БД повлияет только на одного клиента
Против: Отдельные приложения
- Больше работ по обслуживанию с точки зрения мониторинга всех приложений и примененияглобальные обновления (но учитывая количество клиентов, это на самом деле не проблема)
- Может привести к путанице с различными версиями и т. д.
- Нет возможности реализовать суперадмин, который может получить доступ ко всем приложениям (необходимодолжно быть сделано на уровне приложения)
- Сложнее создавать общие функции и данные (например, выставлять счета клиентам)
- Плохая практика?
Должен ли я когда-либо шЕсли объединить все установки, то это действительно не будет проблемой, потому что все основано на UUID.Кроме того, я по-прежнему буду реализовывать клиентскую модель, а все остальное зависит от нее: таким образом, это будет просто вопрос объединения баз данных и файлов клиентов в одну установку приложения (учитывая, что все хотят одинаковую функциональность).
Примечание. Ядро-библиотека CakePHP будет доступно в любом случае, так что здесь проблема не в этом.
Что бы вы подумали в этом случае?Единственная проблема, которую я вижу, - это выставление счетов:
Но это не проблема - вызывать центральную БД из каждого клиента, чтобы сообщить ей: «Эй, я только что создал что-то, что нужно выставить».
Если я делаю это в приложении single - как исключить определенных клиентов из некоторых обновлений?Или я должен просто заставить всех привыкнуть к новым функциям?