"All problems in computer science can be solved by another level of indirection"
This famous quote of David Wheeler has been proven many times by me. Adding an abstraction layer usually adds clarity, testability and more efficient code.
.NET Data Access in WebDev
RavenDB from Clarion