Дублирование по сравнению с зависимостями: который хуже?

[f1] [g1] это сработало для меня. [/g1] [g2] пример [/g2] [f2] [g3] Примечание редактора: оба работают только с [g0] GNU [/g0] [f3]. [/g3]
11
задан Paweł Hajdan 3 October 2008 в 07:46
поделиться

3 ответа

Я определенно рекомендовал бы читать эссе Joels по этому:

"В защиту синдрома Not-Invented-Here"

Для зависимости лучшая метрика, о которой я могу думать, была бы, "был бы мир прекращать работу, если бы это исчезло". Например, если бы STL C++ волшебно ушел, то тонны программ прекратили бы работать. Если бы .NET или Java исчезли, то наша экономика, вероятно, терпела бы поражение из-за количества продуктов, которые прекратили работать...

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

Его аналогичное тому, чтобы быть маленьким потребителем некоторого аппаратного компонента. Иногда аппаратные средства устаревают. Почему? Поскольку никто не использует его. Если Вы будете небольшой компанией и должны будете получить компонент для Вашего продукта, то Вы выберете то, что обычно доступно - что "крупные игроки" заказывают в больших количествах, надеясь, что это означает что (a) компонент не исчезнет, (b) проблемы с компонентом известны, (c) существует большая, информированная база пользователей и (d) это могло бы стоить меньше и быть более доступным.

Иногда, хотя, Вам нужна та специальная конденсаторная потоком часть, и Вы рискуете, что компания, продавая ее Вам не могла бы хотеть продолжать производить конденсаторы потока, если Вы только заказываете 20 в год, и никто, кажется, не заботится :). В этом случае могло бы стоить разработать Ваш собственный конденсатор потока вместо того, чтобы полагаться на ту ненадежную Doc Brown Inc. Просто не покупайте Плутоний у ливийцев.

Если Вы имели дело с производством чего-то (особенно при создании гораздо меньше, чем миллионы из них в год) необходимо было иметь дело с с этой проблемой. Зависимости от программного обеспечения, я верю, должны быть поняты в очень похожих терминах.

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

7
ответ дан 3 December 2019 в 10:27
поделиться

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

  • То, насколько широко распространенный библиотека (является мной собирающийся мочь найти поддержку, если мне нужна она),
  • Как, вероятно, я должен быть сделать неожиданные вещи с ним (я собираюсь закончить тем, что начал трехнедельную миссию добавить функциональность, в которой я нуждаюсь?)
  • То, сколько из него делает я должен использовать (является мной собирающийся проводить дни, изучая входы и выходы только для использования одной функции),
  • Как стабильный это, кажется, (больше проблемы, чем это стоит?)
  • Насколько стабильный интерфейс (вещи, вероятно, изменятся в следующем году или два?)
  • Насколько интересный проблема (я был бы лично более обеспеченной реализацией ее сам? я изучу что-либо полезное?)
2
ответ дан 3 December 2019 в 10:27
поделиться

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

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

Знак того, когда это происходит, мог бы состоять в том, что интерфейсу, который Вы хотите поддерживать, препятствует сторонняя библиотека.

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

Хорошим примером этого было бы использование объектного картопостроителя отношения (Hibernate\NHibernate) позади ряда репозиториев или объектов доступа к данным или фабрик, реализовываемых с платформой внедрения зависимости.

0
ответ дан 3 December 2019 в 10:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: