Обращение за советом о том, нарушает ли это принципы проектирования сервисного уровня в 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до сих пор:
- Почему у меня есть конечная точка для получения статуса?
- У меня есть требование, чтобы моя заявка выставляла только статус заказа.Я подумал, что если конечная точка вернет «легкий» объект -
OrderStatusResponse
, который, по сути, просто содержит логический флаг, будет более простым API, с более легкой полезной нагрузкой по проводам, более легким для понимания и анализа пользователем и т. Д.
- Отдельный метод Service отделяет мою конечную точку от существующего
getOrderInfo
метода обслуживания и его предполагаемой операции.Выделенный метод обслуживания обеспечил бы большую гибкость, если бы потребовалось больше требований - . В противовес вышеупомянутому пункту моя конечная точка не могла бы использовать существующий метод обслуживания
getOrderInfo
, получить полный заказ DTO и вытащить необходимыелогическое поле и построить ответ?В этом случае новый метод обслуживания вообще отсутствует.
Вопрос:
- [MAIN Q] Допустимо ли, чтобы один метод обслуживания вызывал другой в том же классе обслуживания??
- Если нет, то как правильно это сделать?
- Есть ли недостатки в моих рассуждениях?
Спасибо, что прочитали.