Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 服务类(层)中的一个方法能否调用同一服务中的另一个方法?_Java_Service_Soa - Fatal编程技术网

Java 服务类(层)中的一个方法能否调用同一服务中的另一个方法?

Java 服务类(层)中的一个方法能否调用同一服务中的另一个方法?,java,service,soa,Java,Service,Soa,寻求有关这是否违反SOA中服务层设计原则的建议。我的设计很简单-Endpoint->Service->Repository。服务层向端点返回一个DTO,该DTO被转换为响应对象 目前,我的端点和服务层合同如下 端点 public interface Order { OrderInfoResponse getOrderInfo(String orderId); OrderStatusResponse isOrderComplete(String orderId); } 服

寻求有关这是否违反SOA中服务层设计原则的建议。我的设计很简单-
Endpoint->Service->Repository
。服务层向端点返回一个DTO,该DTO被转换为响应对象

目前,我的端点和服务层合同如下

端点

public interface Order {

     OrderInfoResponse getOrderInfo(String orderId);

     OrderStatusResponse isOrderComplete(String orderId);
}
服务

public interface OrderService {

    OrderDTO getOrder(String orderId);

    boolean getOrderStatus(String orderId);
}
现在在我的实现中,
getOrderStatus
服务方法调用
getOrder
方法来查询订单,然后返回检索到的订单实体的布尔字段

到目前为止,我的理由是:

  • 为什么我只有一个端点来检索状态?
    • 我的应用程序要求只公开订单的状态。我认为,让端点返回一个“轻量级”对象-
      OrderStatusResponse
      ,它本质上只包含一个布尔标志,这将是一个更简单的API,更轻的在线负载,更容易让消费者理解和解析,等等
  • 单独的服务方法将使我的端点与现有的
    getOrderInfo
    服务方法及其预期操作分离。如果需要更多的需求,专用服务方法将允许更大的灵活性
  • 针对上述问题,我的端点不能使用现有的
    getOrderInfo
    服务方法,检索完整的订单DTO并拉出必要的布尔字段并构建响应吗?在这种情况下,根本没有新的服务方法
  • 问题:

  • [MAIN Q]一个服务方法调用另一个服务方法是否可以接受 服务舱
  • 如果没有,正确的方法是什么
  • 我的推理有缺陷吗

  • 感谢您的阅读。

    从您的服务中调用您自己的API没有问题-如果它是对“公众”开放的,它将开放供您内部使用。关键是在您的服务中,了解内部服务结构,您可以走捷径。例如,在您的情况下,当您只需要订单状态时,为什么要检索完整的订单

    谢谢!我也在想同样的事情——当我只需要状态时,为什么要检索完整的订单呢。我最终只为订单状态定义了一个新的回购方法,而没有调用另一个服务方法。但是,感谢您深入了解调用另一个服务方法也是可以做到的。你认为这样做可能指向一个隐藏的问题吗?比如说,我应该只检索status而不是Order对象,我认为这取决于太多的变量。我认为我在这里可以说的最好的指导原则是不要将其作为默认值使用——正如我在回复中所说的,API是为外部用户构建的,并且隐藏内部结构,这是内部行为不需要做的事情