Java 为helper类使用EJB接口

Java 为helper类使用EJB接口,java,interface,ejb,Java,Interface,Ejb,我的同事告诉我,EJB本身不应该包含任何方法实现,它只能将方法调用委托给一些“助手”类,即EJB方法应该如下所示: public String bsuinessMethod1() { return helper.bsuinessMethod1() } public void bsuinessMethod2() { helper.bsuinessMethod2() } 像上面这样委托方法的原因是,代码耦合较少(例如,当我想重用不在EJB上下文中的“helper”类的方法时)。他还告

我的同事告诉我,EJB本身不应该包含任何方法实现,它只能将方法调用委托给一些“助手”类,即EJB方法应该如下所示:

public String bsuinessMethod1() {
   return helper.bsuinessMethod1()
}

public void bsuinessMethod2() {
   helper.bsuinessMethod2()
}
像上面这样委托方法的原因是,代码耦合较少(例如,当我想重用不在EJB上下文中的“helper”类的方法时)。他还告诉我们,业务方法不应该了解JavaEE

(如果上面的陈述是错误的,请纠正我,请注意我们不使用JPA事务,我们使用另一个框架来处理数据持久性)

所以,如果上面的语句是正确的,我的“helper”类应该具有与EJB相同的方法。那个么,我可以为帮助器类重用EJB接口吗(即,使帮助器类实现与EJB相同的接口)?从建筑的角度来看,这不是很糟糕吗

我的同事告诉我EJB本身不应该包含任何方法 实现时,它只能将方法调用委托给某些“助手” 班级

我认为你没有从中得到多少好处。为什么不将业务逻辑直接放在EJB中呢?老实说,我看不出有什么坏处

而像上面这样委托方法的原因是为了减少耦合 代码(例如,当我不想重用“helper”类的方法时 (在EJB上下文中)

您仍然可以拥有解耦的类,并且使用EJB不仅仅是为了将任务委托给助手类。解耦更多地依赖于和使用依赖注入,而不是委托给助手类

他还说,业务方法不应该了解Java 嗯

如果您用
@Stateless
(它是JavaEE的一部分)注释您的业务类(EJB),它们将不再是JavaEE不可知的

因此,如果上面的语句是正确的,我的“helper”类应该具有 方法与EJB相同。所以,我可以为帮助器类重用EJB接口吗 (即,使助手类实现与EJB相同的接口)?不会 从建筑学的角度来看,这可能不好吗

从设计的角度来看,这是没有意义的,回到了只调用帮助器类的虚拟EJB的观点。

我不这么认为

将方法调用委托给某些“助手”类

,意味着将ejb方法保留为一个只调用helper类的行程序。 将实现委托给助手类的目的是通过不同类型的服务公开器(ejb、pojo、web服务等)使用核心计算。这也有助于轻松地将服务从ejb移植到非ejb

如果需要,在helper类中进行计算将有助于以多种方式公开服务。他们都可以使用这些辅助类进行核心计算

比如说,我们需要一个服务来检索给定城市一天的平均温度。请原谅,如果这个例子看起来不好,但我希望它表达了这个想法。这项服务需要改进

  • 从数据库中检索给定城市的温度列表 这一天。(以DB为单位,存储为40华氏度、5摄氏度等)
  • 解析温度以确定测量单位并转换为华氏度
  • 过滤无效的温度(零和包含无效字符的值等)
  • 计算平均值
  • 在这个场景中,将项目2、3和4移动到助手类是有意义的。不建议将项目1作为帮助器类的一部分

    现在这个助手类可以由
    a) pojo服务。b) ejb。c) web服务或其他服务。

    好的,谢谢。但是测试呢?拥有
    helepr
    类,我可以轻松地测试他,但是当所有逻辑都集中在EJB中时,如果不部署,我就无法测试它,所以我也不清楚您对
    @无状态的
    的评论(
    它们将不再是Java EE不可知的
    )。我的助手类没有用
    @EJB
    注释。它们是简单的pojo。而且它们很容易被重用,例如在applet中。但是我不能在appletHaving中创建新的ejbbean,仅仅拥有一个“helper”类并不能使您的EJB更易于测试。实际上,如果EJB不包含任何逻辑,为什么要测试它?那你在测试什么?使它更易于测试的是将“helper”类编程为接口,这样您就可以使用类似EasyMock或Mockito的模拟框架来模拟它。我不明白你的第二句话。谢谢。但是为什么不建议将项目1作为帮助器类的一部分呢?因为特定于数据库的操作必须驻留在DAO类中?或者你是什么意思?@MyTitle是的,所以helper类不受事务边界的影响,使其更易于重用。