data abstraction layers