Может ли метод в классе (слое) службы вызвать другой метод в той же службе? - PullRequest
0 голосов
/ 09 июня 2018

Обращение за советом о том, нарушает ли это принципы проектирования сервисного уровня в SOA.Мой дизайн прост - Endpoint -> Service -> Repository.Сервисный уровень возвращает DTO конечной точке, которая преобразуется в объект ответа.

В настоящее время мои контракты на уровне конечной точки и сервисного уровня следующие:

Конечная точка

public interface Order {

     OrderInfoResponse getOrderInfo(String orderId);

     OrderStatusResponse isOrderComplete(String orderId);
}

Сервис

public interface OrderService {

    OrderDTO getOrder(String orderId);

    boolean getOrderStatus(String orderId);
}

Теперь в моей реализации метод getOrderStatus Service вызывает метод getOrder для запроса заказа, а затем возвращает логическое поле полученной сущности Order.

My Reasoningдо сих пор:

  1. Почему у меня есть конечная точка для получения статуса?
    • У меня есть требование, чтобы моя заявка выставляла только статус заказа.Я подумал, что если конечная точка вернет «легкий» объект - OrderStatusResponse, который, по сути, просто содержит логический флаг, будет более простым API, с более легкой полезной нагрузкой по проводам, более легким для понимания и анализа пользователем и т. Д.
  2. Отдельный метод Service отделяет мою конечную точку от существующего getOrderInfo метода обслуживания и его предполагаемой операции.Выделенный метод обслуживания обеспечил бы большую гибкость, если бы потребовалось больше требований
  3. . В противовес вышеупомянутому пункту моя конечная точка не могла бы использовать существующий метод обслуживания getOrderInfo, получить полный заказ DTO и вытащить необходимыелогическое поле и построить ответ?В этом случае новый метод обслуживания вообще отсутствует.

Вопрос:

  1. [MAIN Q] Допустимо ли, чтобы один метод обслуживания вызывал другой в том же классе обслуживания??
  2. Если нет, то как правильно это сделать?
  3. Есть ли недостатки в моих рассуждениях?

Спасибо, что прочитали.

1 Ответ

0 голосов
/ 15 июня 2018

Нет проблем с вызовом вашего собственного API из вашего сервиса - если он открыт для «общественности», он открыт для вашего внутреннего использования.Дело в вашем обслуживании, зная внутреннюю структуру обслуживания, вы можете воспользоваться ярлыками.Например, в вашем случае, зачем получать полный заказ, когда вам просто нужен статус заказа

...