【问题标题】:How can I efficiently manage Perl modules for code reuse?如何有效地管理 Perl 模块以实现代码重用?
【发布时间】:2008-12-16 09:07:00
【问题描述】:

我的公司使用 mod_perl、axkit 和 apache 的组合开发 Web 应用程序。 我们有大量的 Perl 模块、javascript 等,都在 unix 操作系统中。

每当我需要编写一个新函数时,我都会尝试做一些代码重用,但问题是所有 Perl 模块和 javascript 都分散在文件夹中。

我讨厌写一些代码,只是后来发现已经有一个函数做了同样的事情,我目前的方法是尝试用 grep 查找表名以查看是否有冗余函数,但除此之外,我几乎会放弃并编写一个新函数,因为我不想花太多时间搜索并一无所获。

有没有更好的方法来做到这一点?或者更好的是,有没有我可以安装的免费软件工具,可以帮助我正确管理所有功能和模块,甚至允许开发人员登录 cmets 等。

编辑

this discussion关于使用工具检测c++上的代码重复,对于unix平台的perl代码,我们有类似的东西吗?

谢谢 〜史蒂夫

【问题讨论】:

    标签: javascript perl code-reuse module-management


    【解决方案1】:

    组织您的源目录,以便每个功能只有一个位置,并且很容易找到。

    确保共享命名约定以防止重复。

    设计您的模块,让他们只做一件事 - 并且做好。

    查看代码以确保名称和位置正确。

    提供基于代码索引器的高效搜索引擎,以便轻松查看是否已经有函数在执行特殊任务。

    不要低估概括现有组件以便有效地重复使用它的时间。

    记录模块,带有 API 文档和/或单元测试。

    在团队内部进行沟通,以便每个人都能很好地掌握可能已经编写的内容,谁拥有或知道谁可能正在开发/使用模块。

    【讨论】:

    • 你能提供更多关于搜索引擎的细节吗?问题是目前只有我和我的团队负责人,还有一堆旧代码。这并不是一个真正的公司项目,而是我主动避免冗余代码..
    • 这个想法是能够根据关键字搜索任何一段代码(例如查找日历、日期、星期)。对于一个 2 人的团队,像 OpenGrok (en.wikipedia.org/wiki/OpenGrok) 这样的索引器 - 可能有点矫枉过正, ack 就足够了 (petdance.com/ack)
    • 好的,只要它很简单,我就可以从小事做起,然后开始向我的团队负责人和我公司的其他未来开发人员宣传。
    • 确认!只是一个改进的 grep,它是一个单文件 Perl 脚本。再简单不过了。
    【解决方案2】:

    我相信你有某种形式的版本控制软件(svnMercurial、git,除了 VSS 之外的任何东西)?如果你不这样做,现在是时候买一个并开始使用它了。这样,您至少知道您正在使用哪些模块以及代码在哪里。您还可以使用ctags-like 来索引您已编写(或正在使用)的所有模块。

    IDE(尽管我不喜欢这些)也可以帮助查找代码和重构。

    【讨论】:

    • 好吧,基本上我们在 unix 中使用 cvs,但对于我来说,它仍然不是一种足够有效的方法来遍历所有函数以避免重写代码。并且有很多模块已经存在并且没有触及到我的恐惧。你有 ide 在 unix 吗?我目前使用 vi。
    • CVS 远非完美,但有一个 VCS 总比没有好。我们设法使用它在 FreeBSD 上工作了 10 多年。用 ctags 索引你的代码,就像我说的那样知道你有什么。在 UNIX 上,您可以使用 Eclipse 或 Netbeans 作为 IDE。
    • 嗨,您能否提供有关如何开始 VCS 设置的更多信息?谢谢。
    • 您已经在 a VCS 即 CVS 中有代码,所以第一步已经完成。试着找到一些东西来索引你的代码并检查你的 CVS 日志以找出其中的确切内容。
    【解决方案3】:

    这是我很感兴趣的事情。

    使用简单的版本控制软件如 svn、git 或 bazaar 并不是我想要的。除了这样的系统之外,VCS 是强制性的,但它不是这个系统。经过一些研究,我被告知要研究包装以实现这一目标,我认为某种包装系统是可行的方法。

    如果您想要一个打包系统的示例,请查看 debians APT。每个包都有版本描述和源代码的依赖关系,并且给定一个好的打包系统,您可以像“魔术搜索集方程固定点”一样,魔术打包系统将找到一个解决问题的模块。如果您在源代码中包含该包,它还会添加所有缺少的依赖项,例如可能是图形等。

    然而,对此的研究是在我笔记本电脑的硬盘驱动器死机前不久开始的,这将进一步的研究和实际结果推迟到这个方向,但也许你能找到一些有趣的东西(告诉我轻推,轻推)

    HTH, 特他

    【讨论】:

      【解决方案4】:

      如果您的模块包含POD documentation,并且安装在一个公共目录或一组目录下,使用pod2html 生成HTML 文档应该相对容易。获得 HTML 文档后,输入全文搜索索引(带有 fts3、MySQL、Lucene、KinoSearch 等的 SQLite)和一个简单的搜索表单应用程序(CGI 或 mod_perl),就可以开始了。

      如果您使用 trac,则有一个 plugin 将再次从您的 .pod 和 .pm 文件创建 trac wiki 页面,从而使您的文档易于搜索。

      【讨论】:

        【解决方案5】:

        我曾经在一家使用 Perl 的公司工作过,也遇到过类似的问题。我们提出的解决方案是重新组织文件中的功能,同时考虑到 3 层架构(表示、业务和持久性)以及被操作的元素。

        所以,我们对数据库中的每个主表都有一个 perl 文件,每个实体都有一个 perl 文件来操作它们的业务操作,等等......这样,很容易避免代码重复,因为你知道确切的位置寻找给定的功能。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-11-15
          • 2021-09-05
          • 1970-01-01
          • 2020-12-29
          • 2017-07-26
          • 2012-04-27
          • 2014-03-08
          相关资源
          最近更新 更多