Существует промежуточный путь между использованием отдельных API GET для каждого из этих запросов и созданием одного API GET.
Вы можете использовать шаблон Спецификация для предоставления одного GET API, но преобразовать его в Domain Specification Object
перед передачей его на уровень домена для запросов. Обычно вы выполняете это преобразование в вашем View Controller
перед вызовом Application Service
.
Мартин Фаулер и Эрик Эванс опубликовали большую статью об использовании спецификаций: https://martinfowler.com/apsupp/spec.pdf
Как отмечается в документе, Основная идея Спецификации состоит в том, чтобы отделить утверждение о том, как сопоставить кандидата, с объектом-кандидатом, с которым он сопоставляется.
Примечание:
- С вами все в порядке, если вы используете этот шаблон для стороны запроса, как вы обрисовали в общих чертах в своем вопросе, и избегайте его повторного использования в различных контекстах. Например, НЕ используйте объект спецификации как на стороне запроса, так и на стороне команды, если вы используете (или планируете использовать) CQRS. Вы будете создавать центральную зависимость между двумя частями, которую НУЖНО хранить отдельно.
- Спецификации удобны, когда вы хотите представить концепцию домена. Оцените ваши запросы (getByAandB и getByAandC), чтобы вытянуть вопрос, который вы задаете домену (например, попросите своего эксперта по домену описать данные, которые он пытается получить).