abstract factory for data providers