The custom ResultSource doesn't sound too bad. The reason I ask is that it sounds like that's what Ovid will need here, with a database schema that he wants to abstract away. Otherwise, he'd have to make his API deal with the actual tables as they currently are.
Comment on Re^4: Creating a model of a bad database
Well, as much as possible, I'll simply be denying people accessors and mutators. They'll get the behaviors they need and that's it. Of course, it's not quite that simple, but by focusing on behavior instead of data (which is what OO should be doing anyway), I think I can contain the worst of the problem.