2008-12-10 4 views
10

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

Из блогов и сайтов, которые я регулярно проверяю, кажется, что идея «повторного использования кода» вышла из моды. Возможно, сторонники «code reuse» все присоединились к толпе SOA? :-)

Интересно, что при поиске «повторного использования кода» в Google озаглавлен второй результат :

«Внутренний кодекс Повторное использование считается опасным»!

Для меня идея повторного использования кода - это просто здравый смысл, ведь посмотрите на успех проекта apache commons!

То, что я хочу знать:

  • ли вы или ваша компания попробовать и повторно использовать код?
  • Если да, то каким образом и на каком уровне, то есть низкоуровневые api, компоненты или общая бизнес-логика? Как вы или код своей компании повторно используете?
  • Это работает?

Обсудить?


Я прекрасно понимаю, что есть много ЛИЭС с открытым исходным кодом, и что любой, кто использует .NET или JAVA имеет повторно код в той или иной форме. Это здравый смысл!

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

Первоначально я просил;

  • Вы или ваша компания пытались и использовали код?
  • Если да, то каким образом и на каком уровне, то есть на низком уровне api, компонентах или общей бизнес-логике? Как вы или код своей компании повторно используете?

Откуда я сижу, я вижу очень мало примеров компаний, пытающихся повторно использовать код внутри?

Если у вас есть фрагмент кода, который потенциально может быть распространен среди организаций среднего размера, как бы вы рассказывали другим членам компании о том, что этот lib/api/etc существует и может принести пользу?

ответ

9

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

На самом деле мы повторно используем повторное использование кода кода в более чем многоразовые классы, мы смотрим на все предприятие. Вещи, которые больше похожи на проблемы с улучшением каркаса или сквозными адресами, внедряются в структуру разработки, в которой используются все наши приложения (подумайте о таких вещах, как предварительная проверка и пост-валидация, ведение журнала и т. Д.). У нас также есть бизнес-логика, применимая к нескольким приложениям, поэтому такие вещи перемещаются в ядро ​​BAL, доступное где угодно.

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

+0

«Название статьи, о которой вы говорите ...« Я не имел в виду ничего, в частности, это звонит с чем-то, что вы читали раньше? Karl – Karl 2008-12-10 14:59:41

+0

Второй результат, который вы видели в Google. «Повторное использование внутреннего кода считается опасным». Это технический документ, который я прочитал некоторое время назад. – 2008-12-10 15:45:26

1

Мы повторно используем код.

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

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

2

Я думаю, что повторное использование кода осуществляется через проекты с открытым исходным кодом по большей части.Все, что может быть повторно использовано или расширено, осуществляется через библиотеки. Java имеет огромное количество библиотек с открытым исходным кодом, доступных для выполнения большого количества вещей. Сравните это с C++ и как рано все должно быть реализовано с нуля с использованием MFC или Win32 API.

1

Идея повторного использования кода больше не является новой идеей ... отсюда очевидное отсутствие интереса. Но это все еще очень хорошая идея. Вся платформа .NET и Java API являются хорошими примерами повторного использования кода в действии.

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

1

Конечно, мы повторно используем код.

Существует почти бесконечное количество пакетов, библиотек и общих объектов, доступных для всех языков, и целые сообщества разработчиков выполняют их поддержку и обновление.

1

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

3

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

+0

«.. каждая библиотека нижнего уровня, которую вы пишете, должна быть способна адаптироваться к новому набору требований для другого приложения» Скажем, например, вы пишете JMS-библиотеку низкого уровня и хотите поделиться ею с сообществом, как бы вы пошли о совместном использовании? Его маловероятное заболевание находит его на вашем личном сайте. – Karl 2008-12-10 15:19:11

0

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

0

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

Похоже, степень, в которой код А используется повторно, чтобы код В часто основывался на том, насколько идеи в коде А взяты для кода В, абстрагируются в шаблоны дизайна/идиомы/книги/мимолетные мысли/фактический код/​​библиотеки , Трудная часть заключается в применении всех этих хороших идей к вашему фактическому коду.

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

Я думаю, что технари были повторно использованы с 1-го дня так же, как музыканты повторно использовали с 1-го дня. Его постоянная органическая эволюция и sythesis, которая будет продолжаться.

0

Два проекта программного обеспечения, над которыми я работал, были долгосрочными. Один из них около 10 лет, другой уже более 30 лет, переписан в нескольких версиях Фортрана по пути. Оба делают многократное повторное использование кода, но оба очень мало полагаются на внешние инструменты или библиотеки кода. DRY - это большая мантра в новом проекте, который находится на C++, и легче справляется с этим на практике.

5

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

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

следующие вещи необходимы для повторного использования кода для эффективной работы:

  • код или сама библиотека
  • Спрос на код в нескольких проектах или усилий
  • связи часть кода в особенности/возможности
  • Инструкции по использованию кода
  • Обязательство по поддержанию и улучшению кода с течением времени
1

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

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

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

-1

Maven решил использовать код повторно. Я совершенно серьезно.

0

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

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

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

Решение:
1. Разработать и написать код с учетом не только одного проекта, но и подумать о будущих требованиях и попытаться сделать его достаточно гибким, чтобы покрыть их минимальным изменением кода.
2. Прилагать код в библиотеках, которые должны использоваться как есть и не модифицироваться в рамках проектов.
3. Разрешить пользователям просматривать и изменять код библиотеки с решение (не в рамках использования проекта).
4. Проектировать будущие проекты на основе существующих инфраструктур, в случае необходимости вносить изменения в инфраструктуру.
5. Обязать поддерживать инфраструктуру для всех проектов, тем самым сохраняя финансирование инфраструктуры.

1

Мое личное мнение, основанное на практике в моей компании:

  • ли вы или ваша компания попробовать и повторно использовать код?

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

  • Если да, то как и на каком уровне, т.е. API низкого уровня, компонентов или общего бизнес-логики? Как вы или код своей компании повторно используете?

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

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

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

  • Это работает?

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

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

0

Вы или ваша компания пытаетесь использовать код повторно? Если да, то как и на каком уровне , то есть низкоуровневом api, компонентах или общей бизнес-логике? Как вы или код повторного использования вашей компании?

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

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

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

Балансировка Всеобщие Потребности

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

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

Design By Комитет

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

Я думаю, вы можете поделиться больше кода в единомышленников. Наш совсем не был единомышленником. Это не настоящие имена, но у меня бы был Билл, который является программистом высокого уровня и графическим редактором, который создает приятные пользовательские проекты, но сомнительный код с большим количеством хаков, но для этого типа кода он подходит. Я получил Боба, который является старым таймером, который программировал со времен эры перфорации, которому нравится писать 10 000 линейных функций с gotos в них и до сих пор не понимает объектно-ориентированного программирования. Я получил Джо, который, как математический мастер, но пишет код, который никто не может понять, и всегда делает предложения, которые математически выровнены, но не обязательно настолько эффективны с вычислительной точки зрения. Затем я получил здесь Майка, который находится в космосе, который хочет, чтобы мы портировали программное обеспечение на iPhone и думали, что мы все должны следовать соглашениям Apple и техническим стандартам.

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

компромиссы

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

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

Если у вас есть кусок кода, который потенциально может быть распределено между организацией в среднего размера, как бы вы о информировании других членов компании, что Lib/API/и т.д. существовала и может быть в пользу ?

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

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

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

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

Так что в эти дни я переместил свою нетерпимость на недостаток тестирования. Вместо того, чтобы расстраиваться из-за излишних усилий, я считаю гораздо более продуктивным расстраиваться из-за отсутствия у других людей модульного и интеграционного тестирования! : -D

Смежные вопросы