Я знаю, что это широкий вопрос, поэтому я постараюсь быть максимально конкретным. Этот вопрос скорее «организационный», чем технический.
У нас есть многосторонний проект со следующими основными компонентами:
- Сервер, на котором размещена основная бизнес-логика (модели данных)
- Бэк-офис для клиентов, который использует основную бизнес-логику
- API приложения (REST), который также использует основную бизнес-логику
- Существуют приложения для смартфонов (iOS и Android), использующие API приложения
- Есть другое приложение для планшета (android), отличающееся от приложения для смартфона, использующее тот же API-интерфейс приложения.
Скоро я буду в производстве с активными клиентами. И, как и любой проект, мне нужно будет поддерживать все различные компоненты с течением времени. Это означает, что все следующее может быть обновлено:
- код основной бизнес-логики на сервере (используется бэк-офисом, API и, как побочный эффект, мобильными приложениями)
- сам API (используется приложениями для смартфонов и планшетов)
- все мобильные приложения (через appstore / googleplay)
Конечно, части сервера (основной код бизнес-логики и код API) могут быть изменены непосредственно мной. Однако новые мобильные приложения должны быть загружены клиентами в appstore / googleplay, и я не уверен, что они обновлены.
Не могли бы вы дать какие-либо рекомендации, советы по передовому опыту, чтобы обновления были гладкими и без риска для клиента?
Какой компонент мне нужен для «версии»? Как убедиться, что все работает, даже если клиент не обновляет свое мобильное приложение? Должен ли я заставить его обновиться, чтобы облегчить мою работу?
Одним словом, как мне организовать свой многогранный проект с течением времени?
Ответы:
Поскольку вы не можете контролировать, когда мобильные приложения будут обновлены до новой версии, вам необходимо обновить хотя бы ваш REST API. Если вы этого не сделаете, будет невозможно внести обратно несовместимые изменения в этот интерфейс.
Помимо REST API, хорошей идеей является создание версий и других коммуникационных интерфейсов, которые проходят через сетевой интерфейс. Таким образом, вы также не обязаны обновлять все клиенты backoffice одновременно с серверами, и вы можете осуществить постепенный переход на новую версию с периодом «бета-тестирования».
Помимо управления версиями коммуникационных интерфейсов, вы также должны попытаться сделать изменения обратно совместимыми, насколько это возможно. В идеале вы можете развернуть новую версию интерфейса, которая по-прежнему полностью поддерживает старые клиенты, чтобы они не заметили, что что-то изменилось.
источник
Этот пост представляет интересный вопрос о вашем вопросе.
Более практично, если у вас есть 3 компонента:
Вы могли бы использовать типичную схему управления версиями Mmp (Major.minor.patch) для каждого, но в своем внутреннем URL вы могли бы поместить что-то как
http://youhost/M.m/resourceURI
.По мере вашего развития и изменения в API не влияют на ваш контракт с потребителями, вы сохраняете
M.m
как есть в URL. С того момента, как вы вносите изменения в BackEnd, которые влияют на ваших потребителей (будь то изменение в поведении или другой объект), вы используетеM.m+1
,M+1.m+1
илиM+1.m
.Чтобы сохранить работоспособность, нужно развернуть новый Back-End одновременно со старым, в то время как ваши пользователи установят новых потребителей и постепенно прекратят работу старого API.
Вы можете найти лучший ответ, чем мой, здесь: Управление версиями REST API в Stackoverflow
источник
Я рекомендую вам установить сервер непрерывной интеграции, подключить его к вашему репозиторию кода и репозиторию моментальных снимков / выпусков и автоматизировать ваши сборки. Это будет иметь ряд преимуществ:
Мой опыт работы с инструментами с открытым исходным кодом: SVN, Maven 2, Jenkins и Nexus, но есть альтернативы всем этим.
Не стоит недооценивать время обучения, чтобы ваша команда набрала скорость. Но как только они наберут скорость, они никогда не вернутся.
источник
Для относительно небольшой команды по разработке и развертыванию модель совместимости Client N-1, используемая IBM Jazz, может работать довольно хорошо
Старайтесь, чтобы клиенты и серверы имели одинаковый номер версии. [Вместо управления матрицей независимых версий и их совместимости]
Разработайте политику, согласно которой клиентская версия Xyy должна работать со всеми версиями серверов выше Xyy, но ниже X + 2.0.0.
Для версии сервера 4.0 в идеале должна быть версия клиента 4.0 для каждого типа клиента. Тем не менее, совместимость должна поддерживаться таким образом, чтобы допускались несколько разные версии клиентов и серверов.
Клиентская версия 4.x должна быть совместима с серверами версии 4.x и выше, но ниже 6.0; Сервер 4.x должен быть совместим со всеми клиентами версии 3.0 и выше, но меньше или равен 4.x
Таким образом, вы можете обновить версию на сервере, не беспокоясь о немедленном выпуске новых версий клиентов, но у вас будет только четко определенное окно совместимости для поддержки.
Ссылка: IBM Jazz Model [ https://www.ibm.com/support/knowledgecenter/en/SSYMRC_6.0.0/com.ibm.jazz.install.doc/topics/c_n-1.html].
источник
Во-первых, я начну с того, что сформулирую проблему немного иначе. Вы спросили, какие части программного обеспечения вам нужно для «версии». Версия является перегруженным термином в CS и может означать около 100 разных вещей. Основные вещи, на которые я бы посмотрел:
Так как это самый туманный и самый интересный для меня, я просто собираюсь сосредоточиться на # 2. Не существует единого универсального решения для управления конфигурацией файлов cookie. Правила, которые хорошо работают для команды из 2 или 3 человек, могут быть слишком свободными, чтобы сохранить здравомыслие в проекте, который требует сотни рабочих. Правила, которые работают в большой команде, могут потребовать слишком больших накладных расходов для небольшой команды. Скорее всего, вам придется что-то сделать самостоятельно, чтобы собрать что-то вместе, но я бы использовал следующий список для разработки спецификаций вашей системы управления конфигурацией:
Нужна помощь в ответе на вопросы выше? Вы, вероятно, должны нанять консультанта или менеджера по разработке программного обеспечения ... ответ, который может заполнить учебники и является выходом за рамки форума такого типа.
источник