我想将常用的applicationlogic外部化为一个名为Helper的“工具类”。 applicationlogic需要其他CDI bean才能工作。性能:工具类与CDI bean
两种可能性:
一)
@SessionScoped
class ControllerWithCdiBean {
@Inject
Helper helper;
public void doIt() {
Object result = helpder.calculate();
}
}
@RequestScoped
class Helper{
@Inject
Service anyService;
public Object calculate() {
return anyService.calc();
}
}
B)
@SessionScoped
class ControllerWithStaticCallsViaDeltaspike {
public void doIt() {
Object result = Helpder.calculate();
}
}
class Helper{
private static Service anyService = BeanProvider.getContextualReference(Service.class);
public static Object calculate() {
return anyService.calc();
}
什么性能?有什么显着的差异?这两种解决方案对我来说都是可能的,比其他解决方案更好?
一个缺点: 帮助程序被初始化为每请求。
我会去** **。实用程序类是邪恶的 – 2015-03-02 16:23:32
@SvetlinZarev你的意思是类像java.util.Arrays',java.util.Collections'和整个Apache Commons Xyz库是邪恶的?你当然从来没有用过他们:) – 2015-03-02 16:29:22
@LuiggiMendoza有区别。 'Arrays'和'Collections'带有JRE,而'Helper'不带。同样,过多使用静态方法(因此实用程序类)会导致程序代码并使其很难测试。过度使用效用类违反了OOP和TDD的原则,应尽可能避免使用这种原则,并且在OP的情况下,它绝对不可能使用实用类。 – 2015-03-02 17:14:56