Java 实用程序类与服务 [已关闭]
在Java中,实用程序类(具有静态方法的类)和服务类(具有提供“服务的公共方法的类”)之间的区别是什么?例如,人们可以争辩说加密对象(提供加密,解密,哈希或获取盐值的方法)是一个服务提供者,但许多人将此功能分组到具有静态方法的实用程序类中,例如CryptoUtil.encrypt(...)。我试图弄清楚哪种方式可以遵循更好的“设计”。思潮?
在Java中,实用程序类(具有静态方法的类)和服务类(具有提供“服务的公共方法的类”)之间的区别是什么?例如,人们可以争辩说加密对象(提供加密,解密,哈希或获取盐值的方法)是一个服务提供者,但许多人将此功能分组到具有静态方法的实用程序类中,例如CryptoUtil.encrypt(...)。我试图弄清楚哪种方式可以遵循更好的“设计”。思潮?
通过使用不同的服务对象可以获得不同的行为。实用程序类中的静态方法无法换出。这对于测试、更改实现和其他目的非常有用。
例如,您提到了一个带有方法的。拥有可以支持不同加密策略,不同消息收件人等的不同对象将非常有用。CryptoUtil
encrypt
不同之处在于服务类可能具有状态。我说的状态是指会话状态。考虑一个名义上的排序系统。
interface OrderSystem {
void login(String username, String password);
List<Item> search(String criteria);
void order(Item item);
void order(Item item, int quantity);
void update(Item item, int quantity);
void remove(Item item);
void checkout();
Map<Item, Integer> getCart();
void logout();
}
有状态会话 Bean 可以完成这样的事情(例如),尽管在这种情况下,身份验证可能会被更传统的 EJB 机制所涵盖。
这里的要点是存在会话状态,因为一个调用的结果会影响后续调用。您可以将静态方法视为一堆在本地执行的简单无状态服务。
服务具有更广泛的含义,包括但不限于:
我认为最好的做法是简单地使用静态方法作为方便的方法(特别是考虑到Java缺乏扩展方法)。服务比这更丰富。