java中的帮助对象是什么?

gir*_*iri 36 java

我遇到过几次被称为辅助对象的事情......任何人都可以详细说明那些辅助对象是什么,为什么我们需要它们?

Boz*_*zho 52

可以将一些类共有的一些操作移动到辅助类,然后通过对象组合使用它们:

public class OrderService {
    private PriceHelper priceHelper = new PriceHelper();

    public double calculateOrderPrice(order) {
        double price = 0;
        for (Item item : order.getItems()) {
            double += priceHelper.calculatePrice(item.getProduct());
        }
    }
}

public class ProductService {
    private PriceHelper priceHelper = new PriceHelper();

    public double getProductPrice(Product product) {
        return priceHelper.calculatePrice(product);
    }
}
Run Code Online (Sandbox Code Playgroud)

使用辅助类可以通过多种方式完成:

  • 直接实例化(如上)
  • 通过依赖注入
  • 通过制作他们的方法static并以静态方式访问它们,比如IOUtils.closeQuietly(inputStream)关闭一个InputStream不会抛出异常.
  • 至少我的约定是只使用静态方法而不是依赖项命名类XUtils,而反过来又有依赖关系/需要由DI容器管理的classeesXHelper

(上面的示例只是一个示例 - 不应该根据域驱动设计进行讨论)

  • 关闭,但不完全.至少在我的约定中,实用程序类是没有任何依赖关系的静态方法,而辅助程序具有依赖关系,因此具有非静态方法. (8认同)
  • 那么与实用程序类同义的含义是什么?我经常使用"`blahUtil.java`"但仍然看到类似"`blahHelper.java`"的类. (2认同)

Pau*_*and 12

这些是"坐在代码主体侧面"的对象,并为对象执行一些工作.他们"帮助"对象完成它的工作.

例如,许多人都有一个Closer助手对象.这将采用各种可关闭的对象,例如java.sql.Statement,java.sql.Connection等,并将关闭该对象,并忽略它产生的任何错误.这往往是因为如果你在关闭一个对象时出错,那么你无论如何都无法做到这一点,所以人们就会忽略它.

而不是这个样板:

try {
  connection.close();
} catch (SQLException e) {
  // just ignore… what can you do when you can't close the connection?
   log.warn("couldn't close connection", e);
}
Run Code Online (Sandbox Code Playgroud)

分散在代码库周围,他们只需调用:

Closer.close(connection);
Run Code Online (Sandbox Code Playgroud)

代替.例如,看番石榴closeQuietly.