Java 服务类(层)中的一个方法能否调用同一服务中的另一个方法?
寻求有关这是否违反SOA中服务层设计原则的建议。我的设计很简单-Java 服务类(层)中的一个方法能否调用同一服务中的另一个方法?,java,service,soa,Java,Service,Soa,寻求有关这是否违反SOA中服务层设计原则的建议。我的设计很简单-Endpoint->Service->Repository。服务层向端点返回一个DTO,该DTO被转换为响应对象 目前,我的端点和服务层合同如下 端点 public interface Order { OrderInfoResponse getOrderInfo(String orderId); OrderStatusResponse isOrderComplete(String orderId); } 服
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
方法来查询订单,然后返回检索到的订单实体的布尔字段
到目前为止,我的理由是:
- 我的应用程序要求只公开订单的状态。我认为,让端点返回一个“轻量级”对象-
,它本质上只包含一个布尔标志,这将是一个更简单的API,更轻的在线负载,更容易让消费者理解和解析,等等OrderStatusResponse
getOrderInfo
服务方法及其预期操作分离。如果需要更多的需求,专用服务方法将允许更大的灵活性getOrderInfo
服务方法,检索完整的订单DTO并拉出必要的布尔字段并构建响应吗?在这种情况下,根本没有新的服务方法感谢您的阅读。从您的服务中调用您自己的API没有问题-如果它是对“公众”开放的,它将开放供您内部使用。关键是在您的服务中,了解内部服务结构,您可以走捷径。例如,在您的情况下,当您只需要订单状态时,为什么要检索完整的订单谢谢!我也在想同样的事情——当我只需要状态时,为什么要检索完整的订单呢。我最终只为订单状态定义了一个新的回购方法,而没有调用另一个服务方法。但是,感谢您深入了解调用另一个服务方法也是可以做到的。你认为这样做可能指向一个隐藏的问题吗?比如说,我应该只检索status而不是Order对象,我认为这取决于太多的变量。我认为我在这里可以说的最好的指导原则是不要将其作为默认值使用——正如我在回复中所说的,API是为外部用户构建的,并且隐藏内部结构,这是内部行为不需要做的事情