在JavaEE中创建具有适当分层的Web服务

在JavaEE中创建具有适当分层的Web服务,java,jakarta-ee,jax-rs,Java,Jakarta Ee,Jax Rs,我正在使用JavaEE来运行我的后端系统,我有一个问题,关于如何在创建web服务时对其进行适当的分层 我基本上是按照DDD的原则来组织我的应用程序的,这意味着我有一个域层、存储库层和服务层。因此,服务层用@Stateless注释,它们是我的EJB 现在,我可能会发疯,用JAX-RS框架的更多注释来注释这个服务类……但我不知道这是否正确,原因有几个: 这不是有点混合层次吗 那么,我如何对我的Web服务进行版本设置?假设我今天创建了一个Web服务,明天我发现它真的很糟糕,但是在晚上有人创建了一个使用

我正在使用JavaEE来运行我的后端系统,我有一个问题,关于如何在创建web服务时对其进行适当的分层

我基本上是按照DDD的原则来组织我的应用程序的,这意味着我有一个域层、存储库层和服务层。因此,服务层用@Stateless注释,它们是我的EJB

现在,我可能会发疯,用JAX-RS框架的更多注释来注释这个服务类……但我不知道这是否正确,原因有几个:

  • 这不是有点混合层次吗
  • 那么,我如何对我的Web服务进行版本设置?假设我今天创建了一个Web服务,明天我发现它真的很糟糕,但是在晚上有人创建了一个使用它的应用程序,如果我把它扔掉,应用程序就不能再使用了。我想要的是一个可以在www.myurl.com/api/v1/customers上找到的Web服务 以及www.myurl.com/api/v2/a_new_customers_webservice上的新Web服务
  • 在某种程度上,这就是我想要的

    也许还有其他的缺点

    那么解决办法是什么呢?如果我说我创建了另一组用JAX-RS注释的类,然后这些方法可以在内部使用服务层EJB中的方法,那么我说的对吗


    如果有另一个webservice版本,我可以创建另一组使用其他URL和逻辑的类。还是我错了?您将如何组织它?

    根本的问题是如何组织代码以便重用。正如你所指出的,你可以:

  • 用JAX-RS注释EJB服务,使其成为web服务
  • 创建ejbweb服务(即使用JAX-RS注释),以重用其他公共EJB服务(一级间接)
  • 创建将公共逻辑重用为POJO(一级间接寻址)的EJB web服务
  • 这三种选择对我来说都是有效的

    如果您对EJB服务的API有信心,但对web服务的API没有信心(可能存在一些阻抗不匹配),那么我选择2

    如果您对EJB服务应该做什么没有信心,那么这可能是第一件要弄清楚的事情;)


    如果您现在有信心,但怀疑它将来可能会改变,我会选择最简单的解决方案1,然后根据必须改变的内容进行重构。Apply.

    我明白你的意思:第一个将在EJB上添加用于我的服务层的注释,第二个与我提到的相同;使用另一组使用服务层EJB的Web服务EJB?@Dude是的,这就是我的意思