代码之家  ›  专栏  ›  技术社区  ›  NawaMan

组织小型公用设施功能

  •  1
  • NawaMan  · 技术社区  · 15 年前

    经过多年的编程,我们都有一套小功能,用作我们希望它内置的辅助工具,这样我们就可以在任何项目中使用它,并让更多的人来照顾它(测试和优化)。

    我收集了很多这些功能。我想知道你们是怎么组织的?你有什么建议吗?

    我就是这样做的。我把它放在一个单独的项目(Eclipse项目)中,比如说“myutils”,它被其他项目引用。这是可行的,但由于utils集合越来越大,所以utils比项目代码(对于小项目)大有点奇怪。要把它装进罐子里,你必须手工选择它们(或者把它们都包括在内)。有更好的方法吗?

    同样,Java要求所有函数都在一个类中,所以我有很多静态函数(那些不适合OOP的函数),例如函数从文件名读取文本文件。这样地:

     package nawaman.myutil;
    
    public class UText {
    
        static public String ReadTextFile(String pFileName) {
            ...
        }
        static public String[] ReadLines_fromFile(String pFileName) {
            ...
        }
        static public String ReadLine_fromFile(String pFileName, int pLineNumber) {
            ...
        }
        ...
    }
    

    所以当我需要包含所有的函数时,尽管它没有被使用。

    有更好的方法吗?

    不管怎样,我在Linux上使用Eclipse,如果它有特殊的技术,但是如果你有其他工具的技术,我可以自由分享。

    6 回复  |  直到 15 年前
        1
  •  1
  •   Kwebble    15 年前

    我将这些实用程序类视为我开发的软件外部的其他组件:

    • 对于每个组件,我创建一个Eclipse项目并将其构建到一个JAR中。
    • 类在包中按逻辑分组,例如[domain].util.net,[domain].util.text等。
    • 在项目中,我包含了我需要的依赖项。马文可以帮你。

    编写实用程序类有很多静态方法。这是我不常用的东西。例如,可以将显示的文本函数重构为一个类或一组类,这些类或一组类从集合框架扩展或实现类和接口。这使得我的代码更容易与其他库集成。

        2
  •  1
  •   tangens    15 年前

    这是可行的,但由于utils集合越来越大,所以utils比项目代码(对于小项目)大有点奇怪。要把它装进罐子里,你必须手工选择它们(或者把它们都包括在内)。有更好的方法吗?

    对于我的项目,我使用 javac 从我的Util库中选择所有类。为此,我将项目中的所有类编译为空的输出目录。javac自动解析对UTIL库的依赖关系,因为我将UTIL库路径添加为源路径。现在,我可以创建一个JAR,它包含我项目的所有类,并且只包含UTIL库所需的类。

    同样,Java要求所有函数都在一个类中,所以我有很多静态函数(那些不适合OOP的函数),例如函数从文件名读取文本文件。

    我也是这样做的。但是我尝试用很多小的UTIL类来代替一些大的类,这样我就不必在jar中包含大量不需要的方法。

        3
  •  1
  •   user166390    15 年前

    我的“实用程序”有自己的包名称空间和SVN存储库。 它们本质上是 我的 自己的库:可以拉入、共享、标记、更新的不同项目。

    这些“库”中使用的组织取决于所讨论的范围和功能。

    因为我不同意作为某个潜在类/JAR输出的从属结构: 如果您担心类和/或JAR中的“方法膨胀”,请使用自动化工具来解决这个问题。 ProGuards is just one example 而且,虽然它可以使人困惑,但在“死代码消除”方面也同样有效。

        4
  •  1
  •   cetnar    15 年前

    将utils模块拆分为较小的子项目。使用maven或其他构建系统跟踪所有util模块的版本。它们对您的系统至关重要,因为我认为它们在您的几乎所有项目中都使用。使用类似的工具 Findbugs PMD 以确保代码的质量。

    每个项目都需要知道使用哪个版本的utils模块。在我看来,向您的一个“nonutils”项目的二进制文件/源中添加一些松散耦合的util类是不可接受的。

    请用其他公共项目修改你的类,比如 Apache Commons . 我认为你的很多实用程序代码是相似的。最好考虑一下重写你的 static metods 因为它们妨碍了测试(我相信findbugs也会抱怨很多)。

    综上所述,创建一个实用程序库是一件很难的事情,而且要负很大的责任。所以在代码质量方面要求很高。我希望我的建议会有所帮助。

        5
  •  1
  •   Thorbjørn Ravn Andersen    15 年前

    在编译之后,您应该非常小心地删除类——您可能会在运行时遇到未找到类的情况。如果您从不使用反射或class.forname(),那么应该是安全的,但是它们引入了编译器无法帮助您的运行时依赖项(就像“new”一样)。

    记住-那些没有使用的类在运行的程序中不使用内存,只使用磁盘上的字节。

    就我个人而言,我最终说磁盘空间很便宜,意外删除导致运行时中断的类定义的风险对我来说是不值得的,所以我说-所有用于编译的代码都必须被发送。

        6
  •  0
  •   popester    15 年前

    我不使用Eclipse,但是在Visual Studio中,您可以添加对文件的引用,而不需要物理移动或复制它。这允许您在源代码管理的根目录中定义一个文件,所有项目都可以引用该文件,而不必包含在每个项目中,也不必处理复制问题。使用这种解决方案,您可以智能地将UTIL方法拆分为不同的文件,并根据单个项目的需要选择性地包含这些方法。你也可以去掉多余的罐子。

    也就是说,我不知道Eclipse是否支持这种文件引用,但它可能值得一看。