Предположим, у вас есть пять продуктов, и все они используют одну или несколько внутренних библиотек компании, написанную отдельными разработчиками.
Это звучит просто, но на практике я считаю, что его очень сложно поддерживать.
Как вы справляетесь со следующими сценариями:
-
Разработчик непреднамеренно вводит ошибку и разбивает все на производстве.
-
Каждая библиотека должна созревать. Это означает, что API должен развиваться, и как вы развертываете обновленную версию для производства, если каждый разработчик должен обновлять/тестировать свой код, пока они чрезвычайно заняты другими проектами? Это проблема ресурса и времени?
-
Контроль версий, их развертывание и использование. Вы сохранили бы это в одном глобальном местоположении или заставляли бы каждый проект использовать, скажем, svn: externals, чтобы "связать" библиотеку?
Я обнаружил, что очень сложно разработать хорошую стратегию. Моя собственная теория домашних животных такова:
-
В каждой общей библиотеке должен быть супер-тщательный набор тестов, иначе он должен никогда быть обычным, даже если это означает, что кто-то еще дублирует усилия. Дублированный непроверенный код лучше, чем обычный непроверенный код (вы разбиваете только один проект).
-
Каждая общая библиотека должна иметь выделенный сопровождающий (может быть компенсирована действительно хорошим набором тестов в меньшей команде).
-
Каждый проект должен проверить версию библиотеки, которая, как известно, работает с ней. Это означает, что разработчику не нужно отвлекаться на обновление использования API, поскольку общий код обновляется. Каким он будет. Каждая нетривиальная часть кода развивается в течение нескольких месяцев и лет.
Спасибо за ваши мысли об этом!