Jakarta ee 在JavaEE中为服务提供接口的好处

Jakarta ee 在JavaEE中为服务提供接口的好处,jakarta-ee,service,interface,ejb,Jakarta Ee,Service,Interface,Ejb,在JavaEE中为每个服务提供接口是否是一种好的(和常见的)实践?除了使用接口指定服务必须实现的方法之外,还有什么其他好处 例如: public interface UserService { public User findUser(String username, String password); } @Stateless public class UserServiceImpl implements UserService { public User findUse

在JavaEE中为每个服务提供接口是否是一种好的(和常见的)实践?除了使用接口指定服务必须实现的方法之外,还有什么其他好处

例如:

public interface UserService {
     public User findUser(String username, String password);
}

@Stateless
public class UserServiceImpl implements UserService {

    public User findUser(String username, String password) {
        // some code
    }
}

除非您打算以某种客户端库或API的形式共享接口,否则不要使用它们。在单个模块中使用它们没有任何意义。最新的JavaEE版本强调简单,没有样板代码-代码越少越好。值得注意的例外是CDI替代方案,但这是一个特殊的用例,与interface impl的、、旧java ee“”模式非常不同。
我认为唯一的例外是JAXRS端点定义,如果您有基于java的客户端。然后,将Rest接口和DTO放入API模块,并在客户端和后端服务提供商(比如microservices communication,或前端后端)之间共享它是很有用的。但是,如果您的客户机不是java,就不用麻烦了,只需对bean本身进行注释。

除非您打算以某种客户机库或API的形式共享接口,否则不要使用它们。在单个模块中使用它们没有任何意义。最新的JavaEE版本强调简单,没有样板代码-代码越少越好。值得注意的例外是CDI替代方案,但这是一个特殊的用例,与interface impl的、、旧java ee“”模式非常不同。
我认为唯一的例外是JAXRS端点定义,如果您有基于java的客户端。然后,将Rest接口和DTO放入API模块,并在客户端和后端服务提供商(比如microservices communication,或前端后端)之间共享它是很有用的。但是,如果您的客户端不是java,就不用麻烦了,只需对bean本身进行注释。

当您在同一个模块中时,您可以使用接口定义两种使用服务的方式,但在这种情况下,您将有两个接口。这是否意味着,如果我以OP为例,如果我有一个带有标准单个ejb模块+war模块的EAR,我可以使用
@ejb
?@Al1直接将ejb模块中定义的userserviceinpl注入war模块中。是的,您可以(至少在JEE7中)并且请不要命名您的ejb
someserviceinpl
——只需
SomeService
。老实说,任何现代Java EE应用程序的代码库看起来都很棒,特别是当你将其与过去的混乱进行比较时。当你在同一个模块中时,你可以使用接口定义两种使用服务的方式,但在这种情况下,你将有两个接口。这是否意味着,如果我以OP为例,如果我有一个带有标准单ejb模块+war模块的EAR,我可以直接将ejb模块中定义的UserServiceImpl注入war模块中的
@ejb
?@Al1是的,你可以(至少在JEE7中)并且请不要命名你的ejb
SomeServiceImpl
-只要
SomeService
。老实说,任何现代JavaEE应用程序的代码库看起来都很棒,特别是当你将其与过去的混乱进行比较时。