Контракт use case должен описывать потребность приложения, а не API выбранного persistence фреймворка.
Spring Data пагинация хорошо работает в CRUD приложениях. Для многих проектов Pageable в application service это разумный компромисс. Проблема возникает, когда Pageable становится частью публичного контракта use case:
interface OwnerUseCase {
Page<OwnerView> execute(Pageable pageable);
}
Теперь каждый клиент: контроллер, шедулер, message listener, — вынужден знать о Spring Data API. Контракт слоя приложения начинает описывать детали persistence фреймворка, а не потребность приложения.
Независимая от фреймворка модель пагинации
