У нас есть веб-приложение: интерфейсное приложение + фоновое, которое состоит из нескольких логических слоев.Вот упрощенная схема:
Архитектура
Клиентское приложение через веб-интерфейс API достигает агрегатора, который выполняет вызовы SDK, а затем обновляет и улучшает данные.SDK имеет оболочки для других DAL или веб-API.Сервисы общаются напрямую с агрегатором.
Мы используем Visual Studio для разработки, и изначально решение содержало все слои в одном месте:
- web apis
- модели web apis
- агрегатор
- модели аггреагаторов
- sdk
- модели sdk
- услуги
- веб-задания
- etc
Мы используем Microsoft Stack и Azure Devops для развертывания веб-API и других приложений, таких как веб-задания и службы.Для этого мы используем процесс CICD (мы определили определения сборки и выпуска + триггеры).
Сборка начинается, когда новый код отправляется в git.Релиз происходит при создании новой сборки.
Проблема заключалась в том, что если нам нужно было опубликовать веб-API, тогда были собраны все проекты и выполнены соответствующие выпуски.Поэтому мы решили отделить все вещи.Теперь у нас есть несколько решений вместо одного, мы разбили их по слоям, как показано на рисунке выше:
Решение 1:
Решение 2:
- агрегатор
- модели агреагатора
Решение 3:
Решение 4:
Решение 5:
Решение N ...
Чтобы соединить слой, мы решили использовать пакеты Nuget, чтобыsdk в одном nuget, sdk.models в другом и т. д.
Теперь проблема в том, скажем, если я хочу внести изменения в sdk.models, вот ручные шаги (без CICD) для обновлениявсе вещи:
- добавить изменения в пакет sdk.models
- push-пакет sdk.models в nuget
- обновить nugets в проекте sdk
- push sdkпакет в nuget
- обновить нюгет в агрегатеили проект
- отправьте пакет агрегатора в nuget
- обновите все клиентские приложения, чтобы иметь последний пакет агрегатора nuget
Pure madness ...
...Но это позволяет людям работать независимо на каждом слое.Что может рассматриваться как преимущество.
Теперь мы вернулись к CICD.Триггер связан с событием git push, и если фиксируется новый код, создается сборка, а затем определение выпуска публикует материал.Например, в случае sdk решение содержит два проекта: sdk и sdk.models, поэтому, если я добавлю новый код в sdk.models и нажму на git, то триггер активирует сборку для sdk и sdk.models, и когда сборка будет готовазатем release переводит оба пакета nuget в канал nuget.Но это не правильно, потому что sdk должен обновить ссылку на более новую версию пакета sdk.models и затем быть опубликованным.Единственный способ, которым я вижу, как это решить, это перенести sdk.models в другое решение / репо.Это нормально, за исключением того, что у нас будет больше решений и репозиториев для управления, и будет сложнее отлаживать и развивать ...
Вопрос: Как вы думаете, все, что я сказал, имеет смысл?Как улучшить / изменить это?Чтобы иметь более эффективную среду.Любые советы, критика или предложения, пожалуйста.
Спасибо за чтение.