У нас есть продукт, который состоит из нескольких различных модулей.Клиенты могут выбирать, какие модули установлены.
Все модули имеют общую часть, которая обрабатывает вход пользователя в систему и другие очень распространенные функции для всего сайта.
Сложность заключается в том, что некоторые модули зависят от других.Мы выбрали модульный подход, чтобы легко брать большие куски кода и легко создавать новые модули.
Все это говорит о том, что у нас похожая ситуация, когда каждый модуль имеет версии и потенциально выпускается отдельно.Чтобы справиться с этим, мы сделали две вещи.
Во-первых, каждый модуль регистрируется в общей таблице БД с его текущим номером версии.Он также будет регистрировать любые роли безопасности и действия в общих таблицах.Эти проверки достаточно универсальны, чтобы ядро могло их обработать.Во-вторых, каждый модуль имеет свою собственную схему внутри базы данных.т.е.: module1.Table1, module2.Table2.Это позволяет нам иметь одинаковые имена таблиц в нескольких модулях.
Когда мы обновляем данный модуль, это влияет только на его собственный DDL (структура / данные / s'procs / views).Если существует зависимость между модулями, это обрабатывается инструментом обновления.Он проверяет базу данных, чтобы увидеть, установлена ли версия xyz (или лучше) соответствующего модуля.Если это так, то обновление может продолжаться.Если нет, то обновление прерывается и сообщает пользователю, что ему нужно сначала обновить другие части.
Главное, что нужно убрать из этого, - это проверка зависимостей.Если ваши модули действительно разделены и разделяют только общие проверки безопасности, это не имеет большого значения.Однако, если есть некоторые другие совпадения, то установщик для каждого должен проверить версии, чтобы убедиться, что они совместимы.
Вы можете даже предоставить «полный» установщик, который обновляет оба приложения до текущего уровня для тех, которые не синхронизированы.