Those are nice. Services that manage data are an example. Having the class also declare how to interact with the data is nice.
My most OOP pattern I like using is implementing an interface with an abstract class for “standard” implementation. Then implement abstract methods for a concrete thing.
I mean, if you’re really good at SQL these requests are doable in 10-30m + the time it takes to run and export.