В нашей работе у нас есть несколько различных приложений .net, которые имеют много основных функций. Мы создали эти приложения, используя чистую n-уровневую архитектуру, но мы достигли того момента, когда поняли, что повторно реализовали одни и те же функции несколько раз. Очевидно, что это нарушает СУХОЙ, и мы хотели бы исправить это. Мы уже успешно используем Nuget для общего связующего кода (подключение IoC, ведение журнала, настройки), но мы также хотели бы разделить наши данные и бизнес-уровни между всеми нашими приложениями. Идея состоит в том, что пользовательский интерфейс будет иметь дело только с теми частями бизнес-уровня, которые ему действительно необходимы.
Сначала это кажется простой задачей, но продолжающееся развитие может привести к некоторым подводным камням, и мы не уверены, как действовать дальше. Допустим, мы создаем единый бизнес-уровень, чтобы управлять ими всеми. Для краткости я назову это «Фонд». Мы портируем наши приложения на использование Foundation, и все работает отлично. Основа распространяется на светлые слои пользовательского интерфейса через Nuget, и мы хорошо выглядим. Но затем мы начинаем добавлять функции в наши приложения, и у нас возникают проблемы.
Допустим, мы работаем над проектом A и добавляем новую функцию, которая требует изменений в Foundation. Мы вносим изменения в фундамент (Foundation-A) и помещаем их в ленту новостей как нестабильный пакет. Project A получает последнюю версию пакета nuget, и все хорошо. Тем временем другой разработчик работает над проектом B. Он получает последнюю версию Foundation из системы контроля версий, но берет ее из стабильной ветви, чтобы в ней не было изменений в Project A. Он вносит изменения и создает Foundation-B. И все хорошо. Но затем мы обнаруживаем, что функциональные возможности реализации Foundation-A и Foundation-B действительно могут совместно использовать код, поэтому мы объединяем их. Между тем, Foundation-C находится там со своими собственными изменениями. В конце концов, Foundation-B готов к производству, поэтому мы его выдвигаем. Но тогда нам нужно обновить производство A, B,
Кажется, что это может сработать, но мы беспокоимся о работе с различными схемами базы данных и сохранении синхронизации между различными ветвями репозитория Foundation, а также репозиториями Project A, B и C. Кажется, что это, вероятно, потребует много ручной работы, что открывает возможность для ошибок. Я хотел бы, чтобы это было максимально автоматизировано.
Вот стек, который мы используем: C #, TFS с непрерывной интеграцией, Nuget. Наши приложения - это различные типы приложений ASP.NET. Мы готовы взглянуть на разные SCM, если это облегчит задачу.
Я ищу способы сохранить Nuget в здравом уме с нашими различными ветками исходного кода. Мы не хотим случайно запустить код разработки в производство, потому что мы ссылаемся на неправильный пакет Nuget.