I mean, this is how we write programs usually ain't it? We break the problem up into chunks, composing functions and/or objects on our way to the solution.
In this case there's a fairly natural split, as you mention, so it's natural to use composition to handle this as well.
In this case there's a fairly natural split, as you mention, so it's natural to use composition to handle this as well.