@mbickel: however, I've created a successfull project using such layered architecture. I haven't encountered leaking abstractions. When I had problems with performance, I analyzed query log and found a bottleneck. Yes, I had to optimized such things, sometimes I had to reorganize code in business layer, which still had no direct knowledge of persistence. Poor performance of ORM is a myth