I think that one of the underlying problems here is the combination of OOP and an ORM, that is usually what creates the mess to begin with. OOP + ORM is very powerful super weapon, but
an ORM will slowly infect every part of your code base and it is really hard to refactor when it has. Typically the most common ORM class is an active record (or similar) thingie that encapsulates multiple different steps into one, eg,
* connection handling
* transactions handling
* querying data
* writing data
* hydration of data
* relationship handling
* schema awareness
* data validation
* injection prevention
* cache creation & invalidation (data, query, statement caches etc)
* and more
Basically it is a gigantic GOD class. Of course your code base will suffer.I agree with the article authors solution to use some sort of DataStore that only talks plain objects, however I'm not sure I agree with the statement that it is OOP to be blamed or needs to be unlearned. Author mentions Java, Java community's take on OOP, with de facto standard of using Spring + Hibernate is more likely to be the underlying problem. Just like how ORM's infects everything, Java's take on OOP has unfortunately infected other communities too.