Как эффективно управлять модулями Perl для повторного использования кода?

Моя компания разрабатывает веб-приложения, используя комбинацию mod_perl, axkit и apache. У нас есть тонны Perl-модулей, javascripts и т. Д., Все в операционной системе Unix.

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

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

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

РЕДАКТИРОВАТЬ

Здесь обсуждается обнаружение дублирования кода на C++ с использованием инструментов. Есть ли что-нибудь подобное для perl-кодов на платформе unix?

спасибо Стив

5 ответов

Решение

Организуйте исходный каталог так, чтобы у каждой функции было только одно место, где она должна быть, и что-то легко найти.

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

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

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

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

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

Документируйте модули с помощью документации API и / или юнит-тестов.

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

Я полагаю, у вас есть какая-то форма программного обеспечения для контроля версий ( SVN, Mercurial, Git, что угодно, но не VSS)? Если вы этого не сделаете сейчас, пришло время получить его и начать использовать его. Таким образом, у вас есть хотя бы представление о том, какие модули вы используете и где находится код. Вы также можете использовать ctags-like для индексирования всех модулей, которые вы написали (или используете).

IDE (насколько мне это не нравится) также может помочь в поиске кода и рефакторинга.

Если ваши модули содержат документацию POD и установлены в общем каталоге или наборе каталогов, использовать pod2html для создания документов HTML должно быть относительно просто. Когда у вас есть документация HTML, добавьте индекс полнотекстового поиска (SQLite с fts3, MySQL, Lucene, KinoSearch и т. Д.) И приложение для простой формы поиска (CGI или mod_perl), и вы готовы к работе.

Если вы используете trac, есть плагин, который будет создавать страницы вики-страниц trac из ваших файлов.pod и.pm, опять же, упрощая поиск документации.

Это то, что меня очень интересует.

Использование простых программ контроля версий, таких как svn, git или bazaar, не совсем то, что я хочу. В дополнение к такой системе обязательна VCS, но это не та система. После некоторых исследований мне было предложено изучить упаковку, чтобы достичь этого, и я думаю, что какая-то система упаковки - это путь.

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

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

HTH, Tetha

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

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

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