use stratregy pattern for data source