服务class(层)中的方法是否可以调用同一服务中的另一个方法?
Could a method in the service class (layer) call another method in the same service?
求教是否违反了SOA中的Service层设计原则。我的设计很简单- Endpoint -> Service -> Repository
。服务层 return 将 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
方法来查询订单,然后 return 是检索到的订单实体的布尔字段。
到目前为止我的推理:
- 为什么我有一个端点来检索状态?
- 我要求我的应用程序仅显示订单状态。我认为,让端点 return 成为一个 "lightweight" 对象 -
OrderStatusResponse
,它基本上只包含一个布尔标志,这将是一个更简单的 API,网络上的负载更轻,更容易供消费者理解和解析等
- 单独的服务方法会将我的端点与现有的
getOrderInfo
服务方法及其预期操作分离。如果有更多需求,专用服务方法将提供更大的灵活性
- 反驳上述观点,我的端点不能使用现有的
getOrderInfo
服务方法,检索完整的 Order DTO 并提取必要的布尔字段并构建响应吗?那样的话,根本就没有新的服务方式。
问题:
- [MAIN Q] 让一个服务方法调用另一个服务方法是否可以接受
服务 class?
- 如果不是,正确的方法是什么?
- 我的推理有缺陷吗?
感谢您的阅读。
从您的服务中调用您自己的 API 没有问题 - 如果它对 "public" 开放,则它是开放供您内部使用的。关键是在你的服务内部,了解内部服务结构,你就可以走捷径。例如,在您的情况下,当您只需要订单状态时,为什么要检索完整订单
求教是否违反了SOA中的Service层设计原则。我的设计很简单- Endpoint -> Service -> Repository
。服务层 return 将 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
方法来查询订单,然后 return 是检索到的订单实体的布尔字段。
到目前为止我的推理:
- 为什么我有一个端点来检索状态?
- 我要求我的应用程序仅显示订单状态。我认为,让端点 return 成为一个 "lightweight" 对象 -
OrderStatusResponse
,它基本上只包含一个布尔标志,这将是一个更简单的 API,网络上的负载更轻,更容易供消费者理解和解析等
- 我要求我的应用程序仅显示订单状态。我认为,让端点 return 成为一个 "lightweight" 对象 -
- 单独的服务方法会将我的端点与现有的
getOrderInfo
服务方法及其预期操作分离。如果有更多需求,专用服务方法将提供更大的灵活性 - 反驳上述观点,我的端点不能使用现有的
getOrderInfo
服务方法,检索完整的 Order DTO 并提取必要的布尔字段并构建响应吗?那样的话,根本就没有新的服务方式。
问题:
- [MAIN Q] 让一个服务方法调用另一个服务方法是否可以接受 服务 class?
- 如果不是,正确的方法是什么?
- 我的推理有缺陷吗?
感谢您的阅读。
从您的服务中调用您自己的 API 没有问题 - 如果它对 "public" 开放,则它是开放供您内部使用的。关键是在你的服务内部,了解内部服务结构,你就可以走捷径。例如,在您的情况下,当您只需要订单状态时,为什么要检索完整订单