在EJB中定义方法的好习惯是什么?我有EJB扩展Abstract类。
在Abstract Abstract Class中定义受保护的方法并从Child EJB访问它是一个好习惯吗?
答案 0 :(得分:1)
EJB3(至少3和3.1,我相信EJB 3.2在这里有一些变化)有义务为EJB类的行为提供接口。因此,EJB的重要方法需要公开。
作为OOP原则,最好尽可能使用限制性最强的访问修饰符;所以尽可能使用私人。而不是继承,尝试重用代码与组合。
答案 1 :(得分:1)
企业Java bean是从客户端构建逻辑的有用组件,并且尊重隐藏实现的OOP的概念。 每当您想要创建一个简单的EJB时,您必须定义要公开的方法,具体取决于您对逻辑的使用。
为了向客户端公开“服务”,您将定义可以调用哪些方法,这是通过定义作为远程接口的接口来完成的。为了更全面的理解,您可以查看Sessionfaçadej2ee patterns的概念。
import javax.ejb.Remote;
@Remote
public interface IUser {
public Boolean doLogin(String user, String pass);
public void doLogout();
}
在接口内部,您应该能够提供客户端使用EJB(无状态/状态转换)将使用的所有操作或一组操作。请记住,接口将提供给客户端,客户端将使用它们来调用这些方法。
当你实现你的界面时,你不会建立一个单一的。长期,难以理解的课程,但你会有不同的pojos或图书馆为你工作。
通过这种方式,您可以遵循业务对象(BusinessObject j2ee patterns)模型:此模式非常有用,用于分离业务数据和业务逻辑(EG。使用pojo作为逻辑,Dao中的Entity用于业务数据持有者)
作为最后一部分,您可以在业务中使用抽象类。总是存在对组合和继承的争夺,当你不希望任何人实例化那种类时,你应该使用抽象类。设计选择使用“是一个”而不是“有一个”..
答案 2 :(得分:0)
OOP中的一个常见误导是尝试通过抽象类尽可能多地使用继承,传递时间可以以长层次结构和不灵活的实现结束。也许你想从2种不同的服务中获得一些行为。如果不存在多重继承,你该怎么办?好的,你可以做一些技巧,但随着软件的发展,它将无法维护。
EJB是在业务接口的前提下设计的,其中接口公开给客户端。如果您需要来自2个不同服务的某些行为,请尽可能多地使用implements关键字(不要滥用,您不需要像服务这样的上帝)。
受保护的方法很棘手,无法实现EJB意图。所以,你真的需要一个层次结构,你可以创建一个接口继承,其中一些接口扩展其他接口,一些EJB实现接口。这将更加标准,易于扩展。
编辑:也许你认为抽象类可能是一个好主意,因为可能有状态。在高性能EJB(作为无状态)中,您不应该使用该状态,因为EJB是合并的,并且无法保证正确的状态。