Допустим, у вас есть два продукта A и B, которые одновременно разработаны, протестированы и выпущены одной и той же компанией.В интересах повторного использования кода и не выполнения работы дважды создается третья ветвь управления исходным кодом, C, где размещается низкоуровневый код утилиты / фреймворка / помощника.Этот код включает в себя некоторые COM-библиотеки.
Затем руководство решает, что A и B действительно должны иметь свои собственные циклы выпуска и управляться как полностью отдельные продукты.Теперь вы не можете изменять / обновлять C в любое время, когда захотите, потому что когда одна команда работает над A, другая команда может выпустить B через 2 недели, поэтому любой код, входящий в B (включая C), должен быть заморожен.
Решение, которое я вижу, состоит в том, чтобы вынуть C и сделать его отдельным SDK, от которого будут зависеть и A, и B.Этот SDK будет иметь собственную схему управления версиями и собственный цикл выпуска.Таким образом, A может взять на себя обязательство использовать C-1.2.4, и если B требуется что-то более новое, он может внести изменения в C-1.3.8
Проблема, которую я сейчас пытаюсь решить, состоит в том, как обрабатывать COM-библиотекичто может быть возможно, что и A, и B могут быть установлены на одном компьютере.Я вижу три варианта, но не уверен, какой из них хорош / лучше, или если есть еще один вариант, которого я не вижу:
- Каждый раз, когда меняется номер версии, нужно, чтобы какой-то скрипт просматривал файлы .IDLи измените все идентификаторы GUID.Может работать, но по некоторым причинам многим людям кажется страшным (включая меня)
- Использовать COM-активацию без регистрации.Будет ли это работать с исполняемыми файлами не под нашим контролем?(graphedt.exe, iexplore.exe ...).
- Убедитесь, что все COM-объекты, идущие вперед, имеют обратную совместимость и что и A, и B используют последнюю версию установленных модулей.Это похоже на ночной кошмар тестирования, потому что в конечном итоге мы получим комбинации компьютеров и DLL, которые не были проверены на соответствие требованиям.