Thanks to the comment from jcalz and the answer from Alexander Nenashev, I've done a "separation of concerns" and come up with what I think is a workable solution here.