If Middleware is supposed to facilitate communication between front end applications and back end systems how does it achieve this by decoupling front end apps from back end data access? It sounds contradictory. Can someone explain this in layman terms for me? Thanks