use anonymous interfaces to avoid having monolithic Repository type that everything must implement