在JavaEE中使用适当的分层创建Web服务

时间:2012-11-01 12:41:11

标签: java java-ee jax-rs

我正在使用Java EE来运行我的后端系统,我有一个关于如何在创建Web服务方面对其进行适当分层的问题。

我几乎按照DDD的原则组织我的应用程序,这意味着我有一个域层,存储库层和服务层。所以服务层用@Stateless注释,它们是我的EJB。

现在,我可以发疯并使用JAX-RS框架的更多注释来注释这个服务类......但是由于以下几个原因我不知道这是否正确:

  1. 这不会混合分层吗?
  2. 我怎么能对我的网络服务进行版本控制?假设我今天创建了一个web服务,明天我发现它确实很糟糕,但是在晚上有人创建了一个使用它的应用程序,如果我把它丢弃,那么应用程序将无法再使用。我想要的是一个可以在www.myurl.com/api/v1/customers上找到的网络服务 以及www.myurl.com/api/v2/a_new_customers_webservice上的新网络服务
  3. 这就是我想要的某种形式。

    可能还有其他缺点?

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

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

1 个答案:

答案 0 :(得分:2)

基本问题是如何组织代码以供重用。正如您所指出的,您可以:

  1. 使用JAX-RS注释您的EJB服务以使其成为Web服务;
  2. 创建重用其他常见EJB服务(一级间接)的EJB Web服务(即使用JAX-RS注释);
  3. 创建EJB Web服务,将公共逻辑重用为POJO(一个间接层)。
  4. 这三个都是我的有效选择。

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

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

    如果您确信现在,但怀疑它将来可能会发生变化,我现在会选择最简单的解决方案1,并根据必须更改的内容在以后进行重构。申请YAGNI

相关问题