在哪里放置可能可重复使用的辅助函数?

时间:2009-09-27 20:12:23

标签: java language-agnostic oop

这与语言无关,但我目前正在使用Java。

我有一个类Odp做的东西。它有两个私有帮助器方法,其中一个确定int [] []中的最大值,另一个返回String中字符的出现次数。

这些与手头的任务没有直接关系,似乎可以在未来的项目中重复使用。放置此代码的最佳位置在哪里?

  1. 公开 - 不好,因为Odp的功能并不直接相关,这些私有方法是一个不需要在公共接口中的实现细节。

  2. 将它们移到另一个类 - 但是这个类会被调用什么? MiscFunctionsWithNoOtherHome?他们没有统一的主题。

  3. 将其保密并在必要时复制/粘贴到其他课程中 - BAD

  4. 我还能做什么?

8 个答案:

答案 0 :(得分:5)

这是一个解决方案:

将确定二维int数组中te max值的方法移动到名为IntUtils的公共类,并将该类放到util包中。

将返回String中字符出现的方法放入名为StringUtils的puclic类中,并将该类放入util包中。

在Java中编写静态帮助程序类没什么特别糟糕的。但要确保你不要重新发明轮子;您刚才描述的方法可能已经存在于某些OS库中,例如Jakarta Commons

答案 1 :(得分:3)

等到你需要它!

你的课程会更好,因为你现在不知道你未来的确切需求。

准备就绪后,在Eclipse“提取方法”中。


编辑:我发现测试驱动的开发提供了更容易重用的代码,因为您可以预先考虑API。

答案 2 :(得分:1)

很多人创建了一个Utility类,其中很多这样的方法被声明为static。有些人不喜欢这种方法,但我认为它在设计,代码重用和实用性之间取得了平衡。

答案 3 :(得分:1)

如果是我,我要么:

  1. 创建一个或多个包含静态公共方法的Helper类,尽可能精确地命名它们,或者
  2. 如果这些方法都将由基本相同类型的类使用,我将创建一个抽象基类,其中包含这些作为受保护的方法。
  3. 大多数时候我最终选择1,虽然我写的辅助方法通常比你提到的那些更具体,所以更容易想出一个类名。

答案 4 :(得分:0)

我不知道其他语言是做什么的,但我在Java上有这方面的经验:只需移动到你的类的最后支撑并写下你需要的东西(或者如果你喜欢的话,嵌套类,因为这是被接受的规范Java中的约定)

当编译器嘲笑它时,将文件范围类(文件中的默认访问类)移动到它自己的编译单元(它自己的文件中的公共类)。

如果不同的类在同名的嵌套类中具有相同的功能,请参阅其他有关同名嵌套类的注释。在更大的代码库上会发生什么,这两者会随着时间的推移而发生分歧并产生可维护性问题,这些问题会导致Java的类名称作为类类型约定的类型,迫使您以某种方式解决问题。

  

我还能做什么?

注意不要屈服于初学者冲动。你的1-2拳击它,抵制诱惑。

答案 5 :(得分:0)

根据我的经验,大多数大型项目都会有一些“常规”函数的文件,这些函数通常都是各种辅助函数,比如没有任何内置语言库的函数。

在您的情况下,我将创建一个名为“General”的新文件夹(Java的新包),然后创建一个文件以将函数组合在一起(对于Java,这将只是一个包含大量静态成员的类)。

例如,在你的情况下,我有类似的东西:General / ArrayUtils.java,并且我会抛出你的函数和你需要的任何其他函数。

不要担心现在这只是为一个函数创建一个新类(和包)。就像你在问题中说的那样,这将是你将用于下一个项目和下一个项目的东西。随着时间的推移,这个“通用”包将开始发展各种非常棒的帮助类,如MathUtils,StringUtils等,您可以轻松地将它们复制到您工作的每个项目中。

答案 6 :(得分:0)

如果可以,您应该避免使用帮助程序类,因为它会创建冗余依赖项。相反,如果使用辅助方法的类具有相同的类型(如kbrasee所写),则创建一个包含方法的抽象超类。

如果您确实选择创建一个单独的类,请考虑将其打包为本地包,或者至少使用方法,因为它对于较小的项目可能没有意义。如果你的帮助方法是你将在项目之间使用的东西,那么像Edan Maor所提到的那样,类似库的方法是最好的编码方式。

您可以创建一个名为utils或其他项目的单独项目,在其中添加所需的类,并将它们作为库附加到您正在处理的项目中。然后,您可以通过一次修改轻松地进行项目间库更新/修复。您可以为这些工具制作一个包,即使它们可能不是统一的(java.util任何人?)。

答案 7 :(得分:-2)

选项2可能是你在Java中最好的选择,尽管不满意。 Java令人不满意,所以毫不奇怪。

另一种选择可能是使用C预处理器作为构建过程的一部分。您可以将一些私有静态函数放入没有类的文件中,然后将该文件包含在您想要使用它的类中的某个位置。如果您过度使用它,这可能会影响类文件的大小,当然。