В чем недостатки повторного использования кода?

Несколько лет назад нам понадобилась библиотека C ++ IPC для выполнения вызовов функций через TCP. Мы выбрали один и использовали его в нашем приложении. Через некоторое время стало ясно, что он не обеспечивает всей необходимой нам функциональности. В следующей версии нашего программного обеспечения мы выбросили стороннюю библиотеку IPC и заменили ее той, которую написали сами. С тех пор я иногда сомневаюсь, было ли это хорошее решение, потому что это оказалось довольно долгим трудом и, очевидно, было похоже на изобретать велосипед. Итак, мой вопрос: есть ли недостатки повторного использования кода, которые оправдывают это переосмысление?


person Dimitri C.    schedule 30.06.2009    source источник
comment
@leppie: Спасибо, что исправили мою орфографическую ошибку в названии!   -  person Dimitri C.    schedule 30.06.2009
comment
Я нашел связанный с этим вопрос.   -  person Dimitri C.    schedule 07.09.2010


Ответы (11)


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

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

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

Всегда есть компромисс.

person ralphtheninja    schedule 30.06.2009

Я могу предложить несколько

  1. Ошибки воспроизводятся - если вы повторно используете ошибочный код :)

  2. Иногда это может добавить дополнительные накладные расходы. Например, если вам просто нужно сделать простую вещь, не рекомендуется использовать сложную БОЛЬШУЮ библиотеку, которая реализует требуемую функцию.

  3. Вы можете столкнуться с некоторыми проблемами лицензирования.

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

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

person Chathuranga Chandrasekara    schedule 30.06.2009
comment
Это можно резюмировать так: повторно используйте код только в том случае, если он действительно делает то, что вам нужно (и работает) :-) - person sleske; 30.06.2009
comment
ошибки тоже локализуются, а не просто воспроизводятся - person jrharshath; 30.06.2009

P.S. Причины написания собственной библиотеки были:

  • Оценка внешних библиотек часто бывает очень сложной и требует много времени. Кроме того, некоторые проблемы становятся видимыми только после тщательной оценки.
  • Это позволило ввести некоторые особенности, характерные для нашего проекта.
  • Легче заниматься обслуживанием и писать расширения, так как вы знаете библиотеку насквозь.
person Dimitri C.    schedule 30.06.2009
comment
вам, вероятно, следовало просто обновить свой вопрос, а не добавлять ответ в качестве дополнения. - person Carson Myers; 30.06.2009
comment
Я не сделал этого, потому что тогда я бы задавал два вопроса: дублирование существующей библиотеки иногда оправдано, и было ли наше обоснование приемлемым. - person Dimitri C.; 30.06.2009
comment
На самом деле, ответ на свой вопрос - это нормально и даже поощряется. Если это ответ, его надо писать как ответ, неважно, кто его пишет :-). - person sleske; 30.06.2009
comment
Я бы сказал, что эти причины оправданы. - person HLGEM; 30.06.2009
comment
Да, устранение неопределенности использования чужого кода - person Rolf; 23.09.2014

Это почти всегда от случая к случаю. Вы должны смотреть на пригодность и качество того, что вы пытаетесь использовать повторно.

person David Plumpton    schedule 30.06.2009

Проблема номер один: вы можете успешно повторно использовать код, только если это ХОРОШИЙ код. Если он был плохо спроектирован, содержит ошибки или очень хрупкий, вы столкнетесь с теми же проблемами, с которыми уже столкнулись - вам все равно придется делать это самостоятельно, потому что так сложно изменить существующий код.

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

person colithium    schedule 30.06.2009

Золотая мудрость :: Прежде чем его можно будет использовать повторно, оно должно быть пригодным для использования.

person AraK    schedule 30.06.2009

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

person JasonBartholme    schedule 30.06.2009

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

person Chet    schedule 30.06.2009

Недостатки повторного использования кода:

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

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

Так или иначе, вот некоторые из аргументов, которые я бы использовал, чтобы продвигать «изобретение колеса заново».

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

person Rolf    schedule 23.09.2014

Хотите знать, что вы используете, чтобы сохранить заново изобретенную вами библиотеку?

person Community    schedule 30.06.2009
comment
У вас есть куча отличного кода ... как вы его храните, упрощаете поиск, помогаете другим разработчикам найти правильный код для использования? Нравится вики или сайт управления проектами? Кажется, это наиболее распространенный способ хранения кода для повторного использования. - person ; 02.07.2009

  1. Первоначальное время для создания повторно используемого кода дороже и дороже.
  2. Когда в основной ветке есть обновление, вам необходимо синхронизировать его и развернуть снова.
  3. Ошибки воспроизводятся - если вы повторно используете ошибочный код
  4. Повторное использование плохо документированного кода может занять больше времени, чем ожидалось / предполагалось.
person Oswaldo Alvarez    schedule 19.07.2019