Java 为helper类使用EJB接口
我的同事告诉我,EJB本身不应该包含任何方法实现,它只能将方法调用委托给一些“助手”类,即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”类的方法时)。他还告
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类中进行计算将有助于以多种方式公开服务。他们都可以使用这些辅助类进行核心计算
比如说,我们需要一个服务来检索给定城市一天的平均温度。请原谅,如果这个例子看起来不好,但我希望它表达了这个想法。这项服务需要改进
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类不受事务边界的影响,使其更易于重用。