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