While I do understand your take on the matter, and don't mean to undercut it in an unrespectful manner, I am gonna challenge the notion that classes could be based on either real or abstract entities. I'm 20 years deep in OO-design and the major problems I keep coming across with class-based designs, all originate from classes being based on non-concrete entities. As an iron rule within my own team, I demand that all classes are directly based on either concrete entities or the pre-defined abstraction layers we've all agreed upon (so services and data models are OK, helper classes or business objects are not OK). Over the years, this has been the magic sauce that made my team come out on top with regards to velocity and code quality. I'm playing with the idea of writing something on the topic eventually, because I think it's a relatively novel POV within our sector. I do like to use a quote from the matrix to highlight the underlying sentiment: When it comes to abstractions, "The problem is choice".