【问题标题】:Custom Java utility package自定义 Java 实用程序包
【发布时间】:2011-11-03 15:59:33
【问题描述】:

我当前项目中的一个常见操作是将 IP 地址的字符串版本转换为整数表示,并且可以通过单个静态方法轻松处理。我通常会尽量保持它与使用它的代码尽可能接近,但在应用程序的完全不同部分也需要它。

由于在非常不同的包中为这个实用功能相互引用的类似乎有害,我创建了一个util 包并将静态方法(一个用于 int 到 String,一个用于 String 到 int)移动到该包中的 Ip 类。

我认识到这可能是我应该重新考虑项目组织的一个信号,但是添加一个包来保存项目范围的实用程序功能有什么害处吗?在 Java 中是否有处理这种情况的标准方法?

【问题讨论】:

  • 这并没有错,有一些静态的 util 方法并不是设计不好的结果。

标签: java packages static-methods


【解决方案1】:

这是一个普遍的问题,不仅仅是 Java。

“既然它看起来有害”——有什么害处?耦合?单点故障?

您有一个与您在 JDK 本身中所做的完全相同的示例:java.util 有很多在所有地方都在使用的类。

我认为你的设计是有根据的。保持这种状态,直到经验告诉您有一个更好的地方来放置该课程。

你应该注意的一件事是循环依赖。你的 util 包中没有任何东西依赖于它的任何依赖项。如果必须的话,用接口打破循环。

【讨论】:

  • 是的,我担心不必要的耦合。
  • 不需要?看来有必要了。
  • 耦合到实用程序类,是的,这是必要的。 “因为它看起来有害”是关于在一个包中包含一个类,该类指的是最初具有静态方法的非实用程序类。 那个耦合是问题所在。
【解决方案2】:

我看不出有什么问题。事实上,如果你发现你有多个这样的特定操作属于同一个问题域,并且在第三方库中并不方便,或者你希望避免在外部代码上添加额外的依赖项,你可能会非常把它变成一个单独的项目。您自己的 utils jar 可以在您的应用中重复使用。

据我所知,您做了完全正确的事情,确定了一段将被重用的代码并将其单独放置在某个地方。

【讨论】:

    【解决方案3】:

    就我个人而言,我会做与您所做的类似的事情。我通常在基础包中创建一个util 包,用于我知道将在整个项目中使用的项目范围的实用功能。

    如果我需要一个仅由特定类使用的实用函数,该类本身可以处理它。如果我需要特定包中的类将使用的实用程序,请在该包中创建一个 util 包。

    只要我的两分钱。

    【讨论】:

      【解决方案4】:

      添加一个包来保存项目范围有什么害处吗 实用函数?

      不是真的。 util 包的存在是有原因的,以保存 util 类。

      特别是当它在其他包中很有用时。所以它可以是你分类的逻辑顺序

      【讨论】:

        【解决方案5】:

        我不知道它是否“正确”,但我想我可能在我从事的每个项目中都有某种类型的实用程序包。

        【讨论】:

          【解决方案6】:

          我只想添加“高扇入”作为此类实用程序类的术语。来自Code Complete (2nd Ed.) 将其称为几个“设计的理想特征”之一:

          高扇入是指拥有大量使用给定类的类。高扇入意味着系统已被设计为充分利用系统中较低级别的实用程序类。

          【讨论】:

            【解决方案7】:

            实用程序类是定义一组方法的类,这些方法执行常见的、经常重复使用的功能。大多数实用程序类在静态范围内定义这些常用方法。实用程序类的示例包括 java.util.Collections,它为实现 Collection 的对象提供了几种实用方法(例如排序)。 实用程序类应该始终是最终的并且有一个私有的构造函数。

            【讨论】:

              猜你喜欢
              • 2016-10-14
              • 2019-05-25
              • 1970-01-01
              • 2016-08-19
              • 2012-05-04
              • 2019-04-03
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多