这与语言无关,但我目前正在使用Java。
我有一个类Odp做的东西。它有两个私有帮助器方法,其中一个确定int [] []中的最大值,另一个返回String中字符的出现次数。
这些与手头的任务没有直接关系,似乎可以在未来的项目中重复使用。放置此代码的最佳位置在哪里?
公开 - 不好,因为Odp的功能并不直接相关,这些私有方法是一个不需要在公共接口中的实现细节。
将它们移到另一个类 - 但是这个类会被调用什么? MiscFunctionsWithNoOtherHome?他们没有统一的主题。
将其保密并在必要时复制/粘贴到其他课程中 - BAD
我还能做什么?
答案 0 :(得分:5)
这是一个解决方案:
将确定二维int数组中te max值的方法移动到名为IntUtils的公共类,并将该类放到util包中。
将返回String中字符出现的方法放入名为StringUtils的puclic类中,并将该类放入util包中。
在Java中编写静态帮助程序类没什么特别糟糕的。但要确保你不要重新发明轮子;您刚才描述的方法可能已经存在于某些OS库中,例如Jakarta Commons。
答案 1 :(得分:3)
等到你需要它!
你的课程会更好,因为你现在不知道你未来的确切需求。
准备就绪后,在Eclipse“提取方法”中。
答案 2 :(得分:1)
很多人创建了一个Utility类,其中很多这样的方法被声明为static。有些人不喜欢这种方法,但我认为它在设计,代码重用和实用性之间取得了平衡。
答案 3 :(得分:1)
如果是我,我要么:
大多数时候我最终选择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预处理器作为构建过程的一部分。您可以将一些私有静态函数放入没有类的文件中,然后将该文件包含在您想要使用它的类中的某个位置。如果您过度使用它,这可能会影响类文件的大小,当然。