Repository pattern implementation following PoEAA