It's hard to write software that doesn't deal with some sort of data that needs to be processed, stored, retrieved, and displayed in some form or another. While technologies that store data have only begun to change recently, frameworks to access these technologies change very frequently. Someone once quipped that Microsoft data development technology changes every four years. While this trend seems to have slowed in recent years, there's a trend away from relational data (the type of data these data development technologies interface with) towards non-relational data and "big data." One could argue that we're in the shadow of yet another data access framework from Microsoft. Regardless, we want to decouple our dependence on a particular framework or a particular data storage technology in as many places as possible.
While we're not particularly designing or architecting a system to support changing a data framework or changing a data store on-the-fly, we want to...