My ideal data layer implementation