Magento 2 encourages the usage of view models instead of filling the blocks with business logic.
A view model is an abstraction of the view exposing public properties and commands. It allows developers to offload features and business logic from block classes into separate classes that are easier to maintain, test, and reuse. Use this approach anytime you need to inject functionality into template files and your code does not need to be backwards compatible with Magento 2.1.
Paginating a custom collection is pretty straight forward (ex: how to add pagination on custom collection in Magento 2), but is it possible to make use of the ViewModel approach instead of adding the code into the Block class?