Внешние элементы подрывной деятельности - это антипаттерн?

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

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

Please don't use Subversion externals (or similar in other tools), they are an anti-pattern and, therefore, unnecessary

Есть ли скрытые риски при использовании внешнего вида? Пожалуйста, объясните, почему их сочли бы антипаттерном.

Также см. Этот ответ: stackoverflow.com/a/248367/29152.

DuckMaestro 12.08.2015 01:36

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

shawn1874 22.09.2016 00:05
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
69
2
19 791
6

Ответы 6

Основной риск при использовании svn: externals заключается в том, что указанный репозиторий будет изменен таким образом, что нарушит ваш код или внесет уязвимость в системе безопасности. Если внешний репозиторий также находится под вашим контролем, это может быть приемлемо.

Лично я использую svn: externals только для указания на "стабильные" ветки репозитория, которым я владею.

Вот почему является (или должно быть) обычной практикой указывать ссылки svn: externals на выпуски с тегами, даже если речь идет о конкретных ревизиях, а не просто / trunk @ HEAD, который вызывает проблемы.

Quick Joe Smith 17.02.2011 04:35

Хорошая мысль, Быстрый Джо. Думаю, я приму это как свою новую политику.

Mike 01.03.2011 05:37

Я не сторонник формальной документации, но для сложных и важных вещей, таких как контроль версий, я обычно читаю документацию по функциям, которые планирую использовать, прежде чем использовать их. В документации по Subversion предлагается: «Вам следует серьезно подумать об использовании явных номеров ревизий во всех ваших внешних определениях». Наряду с объяснением, они также приводят веские причины, почему.

jpierson 22.02.2013 23:35

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

live-love 29.10.2013 18:17

Я вообще не думаю, что это антипаттерн. Я сделал несколько быстрых поисков в Google и практически ничего не нашел ... никто не жалуется, что использование svn: externals плохо или вредно. Конечно, есть некоторые предостережения, о которых вы должны знать ... и это не то, что вы должны просто сильно разбрызгивать во все свои репозитории ... но что касается исходной цитаты, это всего лишь его личное (и субъективное) мнение . Он никогда особо не обсуждал svn: externals, за исключением того, что осуждал их как антипаттерн. Такие широкие заявления без какой-либо поддержки или хотя бы объяснения того, как человек пришел, чтобы сделать заявление, всегда вызывают подозрения.

Тем не менее, есть некоторые проблемы с использованием внешних элементов. Как ответил Майк, они могут быть очень полезны для указания на стабильные ветви выпущенного программного обеспечения ... особенно на программное обеспечение, которое вы уже контролируете. Мы используем их внутри ряда проектов для служебных библиотек и тому подобного. У нас есть небольшая группа, которая расширяет и работает над базой служебных библиотек, но этот базовый код используется в нескольких проектах. Мы не хотим, чтобы различные команды просто проверяли код служебного проекта, и мы не хотим иметь дело с миллионом веток, поэтому для нас svn: externals работает очень хорошо. Для некоторых людей они могут не быть ответом. Однако я категорически не согласен с утверждением «Пожалуйста, не используйте ...» и с тем, что эти инструменты представляют собой антипаттерн.

Согласен, принятый ответ - чушь. Я прочитал все это и не увидел ни одной конкретной причины в поддержку его утверждений. «Во-первых, svn: external обладает некоторыми интересными поведенческими характеристиками (но детали ускользают от меня на данный момент)», - так близко подошел к нему.

Quick Joe Smith 17.02.2011 04:33

Если простой внешний является анти-шаблоном, потому что он может сломать ваш репозиторий, то репозиторий с явной ревизией не должен.

Выдержка из svn книга:

An externals definition is a mapping of a local directory to the URL**—and possibly a particular revision—**of a versioned resource.

Я думаю, все зависит от вашей цели использования этой функции, это не антипаттерн сам по себе.

Здесь, здесь! Я не могу поверить во всю эту скуку о внешнем без реальных, вменяемых примеров.

Clint Pachl 03.02.2011 11:54

Во внешних компонентах Subversion есть определенные недостатки, но мы, кажется, достаточно успешно используем их для включения библиотек (как наших, так и поставщиков), от которых зависит текущий проект. Так что я не считаю их «антипаттерном». Для меня важными моментами использования являются:

  • Они указывают на конкретную ревизию или тег (никогда не на заголовок) другого проекта.
  • Они вставляются в текущий проект далеко от его собственного исходного кода и т. д. (Например, в подкаталог под названием «файлы поддержки»).
  • Они относятся только к «интерфейсным» файлам других проектов (например, включаемой папке) и двоичным библиотекам (т.е. мы не получаем полный исходный код другого проекта).

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

Утверждение, что а это б не делает аб, если вы не скажете Зачем, это так.

Главный недостаток, который я вижу во внешних ссылках в Subversion, заключается в том, что вам не гарантируется наличие репозитория при обновлении вашей рабочей копии.

Внешние ссылки Subversion можно использовать и злоупотреблять, а особенность сама - не что иное, как особенность. Нельзя сказать, что это шаблон или антипаттерн.

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

Да, вы можете использовать его неправильно, не указав конкретно, какая версия справочника вам нужна. Это вызовет у вас проблемы? Вероятный!

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

Антипаттерн - это решение, которое создает больше проблем, часто больше проблем, чем решает. Использование чего-то вроде svn: external для зависимостей - как раз такой случай. Я скоро попытаюсь проиллюстрировать.

Rob Williams 06.12.2008 22:22

@RobWilliams - Я бы хотел увидеть вашу иллюстрацию svn: externals, изображенную как anit-pattern. Более того, я хотел бы увидеть ваше решение для включения общих данных в систему с контролем версий без дублирования.

Clint Pachl 03.02.2011 12:01

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

Для некоторых из наших внутренних библиотек, которые мы используем в качестве внешних в наших проектах для конечных пользователей, я счел полезным создать тег библиотеки в версии Major.Minor, где мы не применяем критических изменений. При использовании четырехточечной схемы управления версиями (Major.Minor.BugFix.Build) мы позволяем поддерживать актуальность тега с изменениями BugFix.Build (опять же, не применяя критических изменений). Это позволяет нам использовать внешнюю ссылку на тег без номера редакции. В случае серьезных или других критических изменений создается новый тег.

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

никогда не поздно исправить ситуацию. :-) Отличный ответ.

Clint Pachl 03.02.2011 11:57

«Внешние ссылки почти во всех случаях должны указывать на конкретный номер ревизии в URI внешнего репозитория» - и вы получите еще одну темную сторону - совершенно корректно, и прохождение всех тестов ваш код (для устаревших внешних) не работает, когда вы обнаружу коммиты поверх связанных с вашим кодом - в основном это происходит в крайний срок

Lazy Badger 02.03.2013 01:13

Другие вопросы по теме