У меня есть Order
агрегатный корневой класс, содержащий дочерние объекты-значения:
class Order {
val id: String
val lines: Seq[OrderLine]
val destination: Destination
//...omit other fields
}
Это модель чтения CQRS, представленная микросервисом order-search
, отвечающим за поиск заказов по какому-либо фильтру.
Существует OrderApplicationService
, который использует OrderRepository
(я не уверен, что это чистый репозиторий в терминах DDD):
trait OrderRepository {
def search(filter:OrderFilter):Seq[Order]
def findById(orderId:String):Order
}
и ElasticSearchOrderRepository
, который использует ES в качестве поисковой системы.
В связи с новыми требованиями мне нужен новый метод API для пользовательского интерфейса, который будет выполнять поиск всех пунктов назначения по заказам с помощью некоторого фильтра. Это должна быть /destinations
конечная точка, которая будет вызывать хранилище для поиска всех данных. В этом случае важна производительность, поэтому поиск всех заказов и сопоставление их с destination
не кажется хорошим решением.
Какой наиболее подходящий вариант для решения этой проблемы? :
- Добавить новый метод в
OrderRepository
например, def searchOrderDestinations(filter:DestinationFilter): Seq[Destination]
- Создать новый репозиторий:
trait OrderDestinationRepository {
def searchOrderDestinations(filter:DestinationFilter): Seq[Destination]
}
То же самое для службы приложений -мне нужно создать новый DestinationAppService
?
Применимы ли эти опции? Или, может быть, есть лучшее решение? Заранее спасибо!