Как вы справляетесь с изменениями в фреймворках с открытым исходным кодом, которые вы используете для своих проектов?


9

Это может быть моей личной причудой, но мне нравится держать код в актуальных проектах в актуальном состоянии - включая библиотеки / фреймворки, которые они используют. Отчасти это то, что я считаю, что веб-приложение более безопасно, если оно полностью исправлено и обновлено. Частично это просто прикосновение навязчивой компульсивности с моей стороны.

За последние семь месяцев мы сделали большую переписку нашего программного обеспечения. Мы отбросили фреймворк Xaraya, который был медленным и практически мертвым как продукт, и преобразовали в Cake PHP. (Мы выбрали Cake, потому что он дал нам возможность очень быстро переписать наше программное обеспечение и достаточно повысить производительность по сравнению с Xaraya, чтобы оно того стоило.)

Мы реализовали модульное тестирование с помощью SimpleTest и следовали всем соглашениям об именах файлов и баз данных и т. Д.

Торт сейчас обновляется до 2.0. И, кажется, нет жизнеспособного пути миграции для обновления. Соглашения об именах файлов радикально изменились, и они отказались от SimpleTest в пользу PHPUnit.

Это в значительной степени заставит нас остаться в ветке 1.3, потому что, если нет какого-то инструмента конвертации, будет невозможно обновить Cake, а затем постепенно улучшать наш унаследованный код, чтобы воспользоваться преимуществами новой платформы Cake. , Итак, как обычно, мы собираемся в конечном итоге использовать старый фреймворк в нашем репозитории Subversion и просто исправлять его сами по мере необходимости.

И это то, что заводит меня каждый раз. Многие продукты с открытым исходным кодом не позволяют достаточно просто поддерживать проекты на их основе в актуальном состоянии. Когда разработчики начнут играть с новой блестящей игрушкой, будет сделано несколько критических исправлений для старых веток, но большая часть их внимания будет сосредоточена на новой базе кода.

Как вы справляетесь с радикальными изменениями в проектах с открытым исходным кодом, которые вы используете? И, если вы разрабатываете продукт с открытым исходным кодом, учитываете ли вы пути обновления при разработке новых версий?

Ответы:


5

Проблема не уникальна для открытого исходного кода. Те же проблемы возникают с коммерческими проектами. Может быть, даже больше, потому что у вас нет источника, вы можете поддерживать себя, если компания прекращает поддержку.

Проекты с открытым исходным кодом типа конечного пользователя имеют быстрые циклы обновления, и старые версии очень быстро теряют поддержку. С другой стороны, проекты, разработанные для пользователей, которые прикладывают значительные усилия для написания кода, как правило, имеют длительные циклы поддержки старой ветви после серьезного обновления. Достаточно много времени, чтобы вы потратили время, сначала дождавшись его стабилизации и зрелости, а затем перенеся и тщательно протестировав собственный код.

Может быть трудно противостоять искушению иметь самые последние и лучшие версии, но следует понимать, что в программном обеспечении существует фундаментальный компромисс между стабильностью и новыми функциями. Вы не можете иметь одно, не жертвуя другим. Вот почему существуют ветви исправлений, так что вы можете выбрать, какая сторона спектра лучше всего соответствует вашим потребностям.


+1 за правильное наблюдение, что это происходит и в коммерческих продуктах.
Эми Анушевски

3

Мы решили эту проблему с помощью модульного кода.

Наш основной веб-сайт был создан около восьми лет назад, и нам повезло, что он был создан одним из первых участников Spring Framework, так что это была довольно солидная основа. Но, к сожалению, нам также не повезло, что этот разработчик решил раскошелиться на Spring после спора о направлении, в котором он движется, поэтому эта кодовая база теперь застряла на не поддерживаемом форке Spring 1.1.4 (или что-то в этом роде).

Мы пытались переписать код для перехода на новые версии Spring, но это оказалось чрезвычайно сложным. Таким образом, наше решение состояло в том, чтобы начать создавать новые функции сайта в виде модулей в совершенно отдельном приложении, используя последние фреймворки, такие как Spring 3.x, Hibernate 3.6 и т. Д.

Теперь у нас есть два веб-приложения, работающих по одному и тому же базовому URL, и мы используем модуль Apache mod_proxy для назначения каждого пути соответствующему приложению. Например, «/ members» переходит к старому приложению, а «/ directoryies» - к новому приложению. Однако посетитель сайта не будет знать, что он использует разные приложения; они выглядят одинаково для пользователя.

Эти два приложения должны взаимодействовать, например, когда участник входит на сайт (используя наше новое приложение), мы должны уведомить старое приложение о том, что они вошли в систему. Мы делаем это с помощью простого веб-сервиса, доступного только для локальный. Степень интеграции между двумя приложениями оказалась минимальной.

Важной частью этой работы было выявление и объединение общих активов. Таким образом, весь статический текст, графика, таблицы стилей, Javascript и шаблоны были перемещены из исходного приложения в отдельный третий проект, который используют как новые, так и старые приложения. Это гарантирует, что оба веб-приложения выглядят и действуют одинаково, даже если они полностью разделены.

Я полагаю, что со временем мы заменим все больше и больше оригинального приложения, пока в итоге оно полностью не понадобится. Хорошая особенность этого метода заключается в том, что мы можем сделать это медленно с помощью серии небольших изменений с низким уровнем риска - нет необходимости в массовом и рискованном внезапном переключении на новую систему.


2

Я не всегда это делаю. Многие проекты с открытым исходным кодом имеют активные ветки поддержки, поддерживаемые для предыдущих основных выпусков. Иногда их поддерживают люди, которым нужна эта версия. Многие проекты остаются в основной версии, пока они сами не будут готовы к основной версии.


2

И это то, что заводит меня каждый раз.

Каждый раз? Вы должны делать удивительно плохой выбор. Должен быть один пример, где этого не произошло.

Когда разработчики начнут играть с новой блестящей игрушкой

Это подсказка. Избегайте блестящих новых игрушек при использовании проектов с открытым исходным кодом. Избегайте релиза 1.0.

Как вы справляетесь с радикальными изменениями в проектах с открытым исходным кодом, которые вы используете?

Шаг 1. Выбирайте проекты с открытым исходным кодом очень, очень тщательно. Всегда сравнивайте два или более конкурирующих проекта.

Шаг 2. При сравнении двух конкурирующих проектов постарайтесь понять «существенную» функцию, которая предлагается, и то, как они оба подходят к ней. Избегайте «женитьбы» на одном конкретном API слишком рано.

Шаг 3. Охватите принципы проектирования «Позднее связывание» и «Свободное соединение». Попробуйте оградить от изменений проекта с открытым исходным кодом.

Шаг 4. Явно проведите сравнение затрат и выгод между проектами с открытым исходным кодом и «раскручивайте свои собственные». Время от времени создание собственного решения может быть лучше, чем решение с открытым исходным кодом.

Изменение имен файлов не должно быть слишком сложным. Да, это большой, уродливый сценарий. Да, он должен быть запущен в течение нескольких недель во время преобразования. Но это конечная стоимость.

Если это происходит каждый раз, тогда разработайте лучшие стратегии выживания. Поскольку ваши наблюдения за реальным миром таковы, что это всегда будет происходить, то надежда на то, что реальный мир изменится, на самом деле мало чем поможет. У вас есть с трудом завоеванный опыт в изменениях. Используйте это. Считайте это инфекцией и выработайте свой собственный иммунный ответ.


Вы получили меня на гиперболе :) Некоторые продукты обновляются лучше, чем другие. Например, jQuery было достаточно легко обновить.
Эми Анушевски

@ Эми: Достаточно справедливо. Вы можете сравнивать и сравнивать хорошие и плохие проекты. Поэтому вы можете учиться у обоих.
Лотт
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.