我当前项目中的一个常见操作是将IP地址的字符串版本转换为整数表示,并且可以通过单个静态方法轻松处理。我通常会尽量保持尽可能接近使用它的代码,但是在应用程序的完全不同的部分也需要它。
由于在这个实用程序函数中使用非常不同的包相互引用类似乎是有害的,我创建了一个util
包并移动了静态方法(一个用于int到String,一个用于String到int) )进入该包中的Ip
类。
我认识到这可能是我应该重新考虑项目组织的一个标志,但是添加一个包来保存项目范围的实用功能有什么不好吗?有没有一种标准的方法来处理Java中的这种情况?
答案 0 :(得分:6)
这是一个普遍问题,而不仅仅是Java。
“因为它似乎有害” - 有什么危害?耦合?单点故障?
你有一个关于你在JDK中做了什么的例子:java.util
有很多在各地都使用过的类。
我认为你的设计是可以防御的。保持这种状态,直到经验告诉你一个更好的地方放这个班。
你应该防范的一件事是循环依赖。您的util包中没有任何内容取决于它的任何依赖项。如果必须,可以使用接口中断循环。
答案 1 :(得分:3)
我没有看到任何错误。事实上,如果您发现有多个此类特定操作属于同一个问题域并且并非在第三方库中都可以方便地使用,或者您希望避免在外部代码上添加其他依赖项,那么您可能会非常好把它变成一个单独的项目。您可以使用自己的工具罐在整个应用程序中重复使用。
据我所知,你做了一件非常正确的事,就是找出一段可以重复使用的代码,然后将它单独放在某个地方。
答案 2 :(得分:2)
就个人而言,我会做一些类似于你所做的事情。我通常在基础包中创建一个util
包,用于项目范围的实用程序函数,我知道这些函数将在整个项目中使用。
如果我需要一个仅由特定类使用的实用程序函数,则该类本身可以处理它。如果我需要一个将由特定包中的类使用的实用程序,请在该包中创建一个util
包。
只是我的两分钱。
答案 3 :(得分:2)
添加程序包以保存项目范围是否有任何损害 效用函数?
不是真的。 util包存在是有原因的,用于保存util类。
特别是当它在其他包中有用时。因此,它可以是您的分类的逻辑顺序
答案 4 :(得分:1)
我不知道它是否“正确”但我认为我可能在我曾经做过的每个项目中都有某种类型的实用程序包。
答案 5 :(得分:1)
我只想添加“高扇入”作为此类实用程序类的术语。从Code Complete (2nd Ed.)引用它作为几个“设计的理想特征”之一:
高扇入是指拥有大量使用给定类的类。高扇入意味着系统设计为充分利用系统中较低级别的实用程序类。
答案 6 :(得分:0)
实用程序类是一个类,它定义了一组执行常用(通常是重用)函数的方法。大多数实用程序类在静态范围内定义这些常用方法实用程序类的示例包括java.util.Collections,它为实现Collection的对象提供了多种实用程序方法(如排序)。 实用程序类应始终为final,并具有私有构造函数。